WA求调
查看原帖
WA求调
1344890
dzzh楼主2025/8/2 16:45
#include <bits/stdc++.h>
using namespace std;
string s;
typedef unsigned long long ULL;
ULL H1[500010],H2[500010],powB[500010];
const int B=131;
ULL cal(int l,int r,ULL H[]){
	return H[r]-H[l-1]*powB[r-l+1];
}  
int main(){
	int n;
	cin >> n;
	cin>>s;
	powB[0]=1;
	for(int i=1;i<=n;i++) powB[i]=powB[i-1]*B;
	string t=s; 
	for(int i = 0; i < s.size(); i++) {
		if(t[i] == '0') t[i] = '1';
		else t[i] = '0';
	}
	reverse(t.begin(),t.end());
	cout << t << endl;
	t="#"+t; 
	s="#"+s;
	for(int i=1;i<=n;i++){
		H1[i]=H1[i-1]*B+s[i]; // s串的前缀哈希 
		H2[i]=H2[i-1]*B+t[i]; // t串的前缀哈希 
	}
	int l=1,r=n, cnt = 0; //长度为奇数 
	for(int i = 1; i <= s.size(); i++) {
		int mid = 0;//长度 
		l = 1, r = min(i, n-i+1);
		while(l < r) {
			mid = (l+r) >> 1;
			if(cal(i-mid+1, i+mid-1, H1) == cal(i-mid+1, i+mid-1, H2)) {
				l = mid+1;
			}
			else r = mid-1;
		}
		cnt += mid;
//		cout << mid << endl;
	}
//	cout << cnt << endl << endl;
	//长度为偶数  
	for(int i = 1; i < s.size(); i++) {
		int mid;
		l = 2, r = min(i, n-i);
		while(l < r) {
			mid = (l+r) >> 1;
			if(cal(i-mid+1, i+mid, H1) == cal(n - i-mid+1, n - i, H2)) {
				l = mid+1;
			}
			else r = mid-1;
		}
		cnt += mid;
//		cout << mid << endl;
	}
	cout << cnt;
	return 0;
}

有巨佬看出我哪错了吗?我是用字符串哈希做的。全WA

2025/8/2 16:45
加载中...