社区讨论
求助ABC284F
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo3du5o8
- 此快照首次捕获于
- 2023/10/24 05:01 2 年前
- 此快照最后确认于
- 2023/10/24 05:01 2 年前
RT,错了
07_killer 的几个测试点,求 HACKCPP代码可视化:
#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define ull unsigned long long
#define rep(i,l,r) for(register ll i=(l);i<=(r);++i)
#define Rep(i,l,r) for(register ll i=(r);i>=(l);--i)
#define repD(i,u,E) for(register ll i=hd[u];i;i=E[i].nxt)
#define all(x) x.begin(),x.end()
using namespace std;
void upd_s(ll&x,ll v){x=min(x,v);}
void upd_b(ll&x,ll v){x=max(x,v);}
const ll N=3e6+9;
ll n;
ull p[N]={1};//p[i]: BASE^i
ull h[N][2];//哈希
const ll BASE=1321;
ull pre(ll r,ll k){return h[r][k];}
ull suf(ll l,ll k){return h[n][k]-h[n-l][k]*p[l];}
int main(){
string t;
cin>>n>>t;
string a=t.substr(0,n);
string b=t.substr(n);
reverse(a.begin(),a.end());
for(ll i=1;i<=n;i++)p[i]=p[i-1]*BASE;
for(ll i=1;i<=n;i++)h[i][0]=h[i-1][0]*BASE+a[i-1];
for(ll i=1;i<=n;i++)h[i][1]=h[i-1][1]*BASE+b[i-1];//前缀哈希 0-a 1-b
rep(x,0,n){
ll y=n-x;
if(suf(x,0)==pre(x,1) && pre(y,0)==suf(y,1)){
cout<<t.substr(0,x)<<t.substr(n+x)<<endl<<x<<endl;
return 0;
}
}
cout<<-1<<endl;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...