这个题我用map写的,一开始用的是map<string,string>处理数据,第一个string表示要查的生词,第二个string代表这个生词出现在哪些文章的标号结果一样就是过不了, 后来换成了map<string,vector >,用vector表示出现文章的标号就过了。 求指教 这是代码 第一个全WA,第二个过了。
#include<bits/stdc++.h>
using namespace std;
#define FastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
typedef unsigned long long ull;
typedef long long ll;
int t,n,m;
map<string,string>s;
string str;
int main(){
FastIO;
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
while(n--){
cin>>str;
s[str]+=to_string(i);
}
}
cin>>m;
while(m--){
cin>>str;
string v=s[str];
//assert(v!="");
for(unsigned int i=0;i<v.size();i++){
//assert(5==3);
if(i==0)cout<<v[i];
else if(v[i]!=v[i-1])cout<<v[i];
else continue;
if(i!=v.size()-1)cout<<" ";
}
cout<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define FastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
typedef unsigned long long ull;
typedef long long ll;
int t,n,m;
map<string,vector<int> >s;
string str;
int main(){
FastIO;
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
while(n--){
cin>>str;
//s[str]+=to_string(i);
s[str].push_back(i);
}
}
cin>>m;
while(m--){
cin>>str;
//assert(v!="");
for(unsigned int i=0;i<s[str].size();i++){
//assert(5==3);
if(i==0)cout<<s[str][i];
else if(s[str][i]!=s[str][i-1])cout<<s[str][i];
else continue;
if(i!=s[str].size()-1)cout<<" ";
}
cout<<endl;
}
return 0;
}