1 条题解
-
0
#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
- 上传者