2 条题解

  • 0
    @ 2026-8-28 11:20:44

    注意到要维护在哪里出现过且不能重复,所以用 map 套 set。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    map<string,set<int>> mp;
    int main(){
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		int num;
    		cin>>num;
    		for(int j=1;j<=num;j++){
    			string s;
    			cin>>s;
    			mp[s].insert(i);
    		}
    	}
    	int m;
    	cin>>m;
    	for(int i=1;i<=m;i++){
    		string s;
    		cin>>s;
    		if(!mp.count(s))cout<<"\n";
    		else{
    			for(auto v:mp[s]){
    				cout<<v<<" ";
    			}
    			cout<<"\n";
    		}
    	}
    	return 0;
    }
    
    • 0
      @ 2026-7-15 23:02:32
      #include <bits/stdc++.h>
      using namespace std;
      map<string, set<int>> a;
      string st;
      int main()
      {
          //freopen("a.in", "r", stdin);freopen("a.out", "w", stdout);
          int n; scanf("%d", &n);
          a.clear();
          for(int i=1; i<=n; i++)
          {
              int m; scanf("%d", &m);
              for(int j=1; j<=m; j++)
              {
                  cin >> st; a[st].insert(i);
              }
          }
          int q; scanf("%d", &q);
          while(q--)
          {
              cin >> st;
              for(auto i:a[st])
              {
                  printf("%d ", i);
              }
              printf("\n");
          }
          return 0;
      }
      
      
      • 1

      【STL:map+set】 [TJOI2010] 阅读理解

      信息

      ID
      1887
      时间
      2000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      93
      已通过
      36
      上传者