70pts WA on #2#3#4
查看原帖
70pts WA on #2#3#4
1183074
xzy_AK_IOI楼主2024/7/21 12:46
#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
#define double long double
const ull base=1e9+7;
const int N=6*1e5+10;
string s;
string t;
ull a[N],b[N],p[N];
int n;
void Hash(string s,string t){
	ull ans=0;
	for (signed i=0;i<=n-1;i++){
		ans=ans*base+(ull)s[i];
		a[i+1]=ans;
	}
	ans=0;
	for (signed i=0;i<=n-1;i++){
		ans=ans*base+(ull)t[i];
		b[i+1]=ans;
	}
}
ull get_hash(int l,int r,bool m){
	if (!m){
		return (ull)a[r]-(ull)a[l-1]*p[r-l+1];
	}		
	else{
		return (ull)b[r]-(ull)b[l-1]*p[r-l+1];
	}
}
signed main()
{
	cin>>n>>s;
	for (int j=0;j<=n-1;j++){
	    char i=s[j];
		if (i=='0'){
			t+='1';
		}
		else{
			t+='0';
		}
	}
	reverse(t.begin(),t.end());
	Hash(s,t);
	//cout<<t<<'\n';
	p[0]=1;
	for (int i=1;i<=n;i++){
		p[i]=p[i-1]*base;
	}
	int sum=0;
	for (int i=1;i<=n;i++){
		int l=0,r=min(i,n-i)+1,mid;
		while (l+1!=r){
			mid=(l+r)>>1;
			int k=i+mid,o=i-mid+1;
			int k2=n-i+mid,o2=n-i-mid+1;
			//cout<<get_hash(o,k,0)<<" "<<get_hash(o2,k2,1)<<" "<<k<<" "<<o<<" "<<k2<<" "<<o2<<'\n';
			if (get_hash(o,k,0)==get_hash(o2,k2,1)){
				l=mid;
			}
			else{
				r=mid;
			}
		}
		sum+=l;
	}
	cout<<sum;
	return 0;
}

开了longlonglong long!!

2024/7/21 12:46
加载中...