44pts,玄关求条
查看原帖
44pts,玄关求条
853792
JoeZYQ楼主2024/12/31 23:27

rt

#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long
const int N=5e5+5;
int pw[N],ha[N],jin=131,fha[N];
int get_ha(int l,int r){
	return ha[r]-ha[l-1]*pw[r-l+1];
}
int get_fha(int l,int r){
	return fha[l]-fha[r+1]*pw[r-l+1];
}
signed main(){
//	ios::sync_with_stdio(0);
//   cin.tie(0),cout.tie(0);
	int n;
	cin>>n;
	string s="S";
	char c;
	for(int i=1;i<=n;i++){
		cin>>c;
		s+=c;
	}
	pw[0]=1;
	for(int i=1;i<=n;i++){
		pw[i]=pw[i-1]*jin;
	}
	for(int i=1;i<=n;i++){
		ha[i]=ha[i-1]*jin+s[i];
	}
	for(int i=n;i>=1;i--){
		fha[i]=fha[i+1]*jin+s[i];
	}
	int l=1,r=n,cnt=0;
	while(l<r){
		int L=0,R=(r-l+1)/2+1;
		while(L+1<R){
			int mid=(L+R)/2;
			if(get_ha(l,l+mid-1)==get_fha(r,r-mid+1))L=mid;
			else R=mid;
		}
		if(s[l+L]<s[r-L]){
			cout<<s[l++];
		}
		else{
			cout<<s[r--];
		}
		if(++cnt%80==0)cout<<"\n";
	}
	cout<<s[l];
	return 0;
}
2024/12/31 23:27
加载中...