40pts求条,过1、3、4、5测试点,样例过了
查看原帖
40pts求条,过1、3、4、5测试点,样例过了
550898
xjx199楼主2024/12/31 19:58

调了好久没调,遂玄关出来

#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++;
//			return;//可能有重复的 
		}
	}
}
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
2024/12/31 19:58
加载中...