水水水~
拿来当 hash || set || map 的练习了。
双hash
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
#define MAXN (500000)
bool hash[MAXN], hash2[MAXN];
#define MAXS (1000)
char s[MAXS];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; ++ i)
{
scanf("%s", s+1);
int len = strlen(s+1);
int sum = 0, sum2 = 0;
for(int i = 1; i <= len; ++ i)
{
sum += (int)(s[i]);
sum2 += (int)(s[i]);
if(i%10 == 0) sum2 += (int)(s[i]);
}
hash[sum] = 1;
hash2[sum2] = 1;
}
int m;
cin >> m;
while(m --)
{
scanf("%s", s+1);
int len = strlen(s+1);
int sum = 0, sum2 = 0;
for(int i = 1; i <= len; ++ i)
{
sum += (int)(s[i]);
sum2 += (int)(s[i]);
if(i%10 == 0) sum2 += (int)(s[i]);
}
if(hash[sum] && hash2[sum2]) puts("Yes");
else puts("No");
}
return 0;
}
set
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <set>
using namespace std;
set<string> s;
#define MAXS (1000)
char t[MAXS];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; ++ i)
{
scanf("%s", t);
s.insert(t);
}
int m;
cin >> m;
while(m --)
{
scanf("%s", t);
if(s.find(t) != s.end()) puts("Yes");
else puts("No");
}
return 0;
}
map
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <map>
using namespace std;
map<string, bool> M;
#define MAXS (1000)
char t[MAXS];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; ++ i)
{
scanf("%s", t);
M[t] = 1;
}
int m;
cin >> m;
while(m --)
{
scanf("%s", t);
if(M[t]) puts("Yes");
else puts("No");
}
return 0;
}