社区讨论

求大佬给组hack数据

CF1200E Compress Words参与者 2已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@lo3dkt9j
此快照首次捕获于
2023/10/24 04:53
2 年前
此快照最后确认于
2023/10/24 04:53
2 年前
查看原帖
RT,改了半天也没发现哪有漏洞,cf上交显示第六组wa了
CPP
#include<bits/stdc++.h>
#define int long long
#define inf 1e18
#define inc 0xcfcfcfcf
#define N 100007
#define M 500007
#define mod 1000000007
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
using namespace std;
int T=1,n;
int fail[N<<2];
string a[N];
int Get_fail(string p)
{
	//memset(fail,0,sizeof(fail));
	int lp=p.size();
	int j=0;
	for(int i=1;i<lp;i++)
	{
		j=fail[i];
		while(j&&p[i]!=p[j])
			j=fail[j];
		if(p[i]==p[j])
			fail[i+1]=j+1;
		else
			fail[i+1]=0;
	}
	return fail[lp];
}
bool Solve()
{
 	//freopen("test.in","r",stdin);
	scanf("%lld",&n);
	for(int i=1;i<=n;++i)
		cin>>a[i];
	string ans=a[1];
	for(int i=2;i<=n;++i)
	{
		string x,y,z;
		int len1=ans.size(),len2=a[i].size();
		if(len1>=len2)
		{
			for(int j=len1-len2;j<len1;++j)
				x+=ans[j];
			y=a[i];
			z=y+"@"+x;
			int now=Get_fail(z);
			for(int j=now;j<len2;++j)
				ans+=a[i][j];
		}
		else
		{
			x=ans;
			for(int j=0;j<len2-len1;++j)
				y+=a[i][j];
			z=y+"@"+x;
			int now=Get_fail(z);
			for(int j=now;j<len2;++j)
				ans+=a[i][j];
		}
	}
	cout<<ans<<endl;
	return true;
}
signed main()
{
	//scanf("%lld",&T);
	while(T--)
		if(!Solve())
			printf("-1\n");
	return 0;
}
/*

*/

回复

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

正在加载回复...