哈希过样例了但零分求条
查看原帖
哈希过样例了但零分求条
1010629
qwqSW楼主2024/10/3 10:07
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

const int N=3e4+4;
const int L=222;
const int B=2333;
//const long long mod=1314521;
int n,len,s,sum;
unsigned long long hs[N][L],pw[L];
char ch[L];

struct node{
	unsigned long long x,y;
}ans[N];

//pair<int,int> ;

void HASH(int x){
	for(int i=1;i<=len;i++){
		hs[x][i]=(hs[x][i-1]*B+ch[i]);
	}
}

bool cmp(node a,node b){
	return a.x<b.x;
}

int main(){
	scanf("%d%d%d",&n,&len,&s);
	for(int i=1;i<=n;i++){
		//scanf("%s",ch+1);
		//HASH(i);
		char c;
		for(int j=1;j<=len;j++){
			cin>>c;
			hs[i][j]=(hs[i][j-1]*B+c);
		}
	}
	pw[0]=1;
	for(int i=1;i<=len;i++) pw[i]=pw[i-1]*B;
	for(int i=1;i<=len;i++){
		for(int j=1;j<=n;j++){
			ans[j].x=hs[j][i-1];
			ans[j].y=hs[j][len]-hs[j][i]*pw[len-i];
		}
		sort(ans+1,ans+n+1,cmp);
		int num=1;
		for(int j=2;j<=n;j++){
			if(ans[j].x==ans[j-1].x&&ans[j].y==ans[j-1].y){
				sum+=num;
				num++;
			}
			else num=1;
			//cout<<"sum="<<sum<<" num="<<num<<endl;
		}
	}
	printf("%d",sum);
	return 0;
}
2024/10/3 10:07
加载中...