1 条题解

  • 0
    @ 2023-9-20 18:34:49

    image

    #include <bits/stdc++.h>
    #define ll long long
    #define mid (l+r>>1)
    #define P 1007
    using namespace std;
    const int N=500005;
    int n,m,k,s,t,a[N<<1];
    unsigned long long H[N<<1],qpow[N<<1];
    char c;
    unsigned ll calc(int l,int r){
    	return H[r]-H[l-1]*qpow[r-l+1];
    }
    int main(){
    	cin>>n;
    	for (int i=1;i<=n;++i) {
    		cin>>c;a[i]=c;a[n+n-i+1]=c;
    	}
    	qpow[0]=1;
    	for (int i=1;i<=(n<<1);++i){	
    		H[i]=H[i-1]*P+a[i];
    		qpow[i]=qpow[i-1]*P;
    	}
    	s=1,t=n;k=0;
    	while (s<=t){
    		int l=1,r=(t-s+1)/2;
    		while (l<=r){
    			if (calc(s,s+mid-1)==calc(n+n-t+1,n+n-(t-mid+1)+1))
    				l=mid+1;
    			else r=mid-1;
    		}
    		if (a[s+l-1]<a[t-l+1]) cout<<(char)(a[s++]);
    		else cout<<(char)(a[t--]);
    		if (++k%80==0) cout<<"\n";
    	} 
    } 
    
    
    
    
    • 1

    信息

    ID
    508
    时间
    1500ms
    内存
    250MiB
    难度
    3
    标签
    递交数
    25
    已通过
    18
    上传者