判断两个字符串是否相等:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
const ULL modA = 1e9 + 7;
const ULL modB = 1e9 + 9;
ULL has[5], SEED = 131;
int N;
int main ()
{
while(~scanf("%d", &N))
{
has[0] = has[1] = 0;
has[2] = has[3] = 0;
char s;
char S[5];
gets(S);
for(int i = 1; i <= N / 2; i++)
{
s = getchar();
ULL t = (ULL)s;
has[0] = (has[0] * SEED + t) % modA;
has[1] = (has[1] * SEED + t) % modB;
}
if(N % 2) s = getchar();
ULL seed[3];
seed[0] = seed[1] = seed[2] = (ULL)1;
for(int i = 1; i <= N / 2; i++)
{
s = getchar();
ULL t = (ULL)s ;
has[2] = (has[2] + t * seed[0]) % modA;
has[3] = (has[3] + t * seed[1]) % modB;
seed[0] = seed[0] * SEED % modA;
seed[1] = seed[1] * SEED % modB;
}
if(has[0] == has[2] && has[1] == has[3] )
printf("YES\n");
else
printf("NO\n");
}
return 0;
}