调了好久没调,遂玄关出来
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=4000010;
const int base=261;
const int mod=233333;
int n,ans,hhash;
char a[maxn],b[maxn],c[maxn],d[maxn];
vector<string> linker[mod+2];
inline void find() {
int hash=1;
for(int i=0; c[i]; i++) {
hash=(hash*1LL*base+c[i])%mod;
}
string t=c;
for(int i=0; i<linker[hash].size(); i++) {
if(linker[hash][i]==t) {
ans++;
}
}
}
signed main() {
scanf("%lld",&n);
for(int i=1; i<=n; i++) {
cin>>a>>b;
c[0]=b[0];
c[1]=b[1];
c[2]=a[0];
c[3]=a[1];
c[4]='\0';
find();
d[0]=a[0];
d[1]=a[1];
d[2]=b[0];
d[3]=b[1];
d[4]='\0';
int hhash=1;
for(int i=0; d[i]; i++) {
hhash=(hhash*1LL*base+d[i])%mod;
}
linker[hhash].push_back(d);
}
cout<<ans;
}
本代码的第二个结果是
43846
标准结果是
43767