萌新求助,关于一个条件的疑惑
查看原帖
萌新求助,关于一个条件的疑惑
570330
CalmKin楼主2022/5/19 19:32
#include<bits/stdc++.h>
#define mod 233333 //定义模数
#define base        //定义基数       
using namespace std;               
vector< pair<int,int> > linker[mod+2];  //定义一个变长二维数组,方便后面插入
int n,ans;
int calcHash(char a[],char b[])
{
	int Hash=1;
	Hash=a[0]-'A'+(a[1]-'A')*267+(b[0]-'A')*267*267+(b[1]-'A')*267*267*267;
	return Hash;	
}
inline int Find(int x)
{
	for(int i=0;i<(int)linker[x%mod].size();i++){
		if(linker[x%mod][i].first==x)
			return linker[x%mod][i].second;
	}
	return 0;
}
void Insert(int x)
{
	for(int i=0;i<(int)linker[x%mod].size();i++){
		if(linker[x%mod][i].first==x)   //第一个数存这个数本身,第二个数存这个数出现的次数
		{
			linker[x%mod][i].second++;
			return;
		}
	}
	linker[x%mod].push_back(pair<int,int>(x,1));
}
int main()
{
	int n;
	char a[12],b[12];
	cin>>n;
	while(n--){
		cin>>a>>b;
// 		if(a[0]!=b[0]||a[1]!=b[1])
		ans+=Find(calcHash(a,b));   //前缀哈希,先查找再插入
		Insert(calcHash(b,a));
	}
	cout<<ans;
}
	if(a[0]!=b[0]||a[1]!=b[1])

我是看洛谷书上的代码

不知道为什么不添加这一句话就会只有40分

加了这一句话就AC???

2022/5/19 19:32
加载中...