Codeforce 2018-2019 ICPC Southern Subregional Contest H.BerOS File Suggestion
程序员文章站
2024-02-17 12:38:10
...
题意:
给你N个长度不超过8个字符的字符串,然后进行Q次查询,对于每次查询的字符串Sq,输出含有Sq的字符串的个数和其中一个字符串,如果没有则输出0和-1。
样例输入:
4
test
contests
test.
.test
6
ts
.
st.
.test
contes.
st
样例输出:
1 contests
2 .test
1 test.
1 .test
0 -
4 test.
思路:先枚举每一个字符串的连续字串,存入map中,map存的是每个字符所在的字符串的位置,用set去重,set的大小就是这个查询的数量。
代码:
#include <iostream>
#include <vector>
#include <map>
#include <set>
using namespace std;
map<string,set<int> >mp;
int main(int argc, char *argv[])
{
int n;
string s[10005];
cin>>n;
string temp;
for(int i=0;i<n;i++)
{
cin>>s[i];
int len=s[i].length();
for(int j=1;j<=len;j++)
{
for(int h=0;h+j<=len;h++)
{
temp=s[i].substr(h,j);
//cout<<h;
//cout<<temp<<endl;
mp[temp].insert(i);
}
}
}
int k;
cin>>k;
while(k--)
{
string ss;
cin>>ss;
if(!mp.count(ss))
{
cout<<"0 -"<<endl;
}
else
{
cout<<mp[ss].size()<<" "<<s[*mp[ss].begin()]<<endl;
}
}
return 0;
}