社区讨论

求助ABC284F

学术版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo3du5o8
此快照首次捕获于
2023/10/24 05:01
2 年前
此快照最后确认于
2023/10/24 05:01
2 年前
查看原帖
RT,错了 07_killer 的几个测试点,求 HACK
代码可视化:
CPP
#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;
}
验证码ab99

回复

3 条回复,欢迎继续交流。

正在加载回复...