社区讨论

非题解做法求hack

CF1701E Text Editor参与者 1已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mhjkywdb
此快照首次捕获于
2025/11/04 04:16
4 个月前
此快照最后确认于
2025/11/04 04:16
4 个月前
查看原帖
非题解做法,WA on #10,求hack
CPP
#include<bits/stdc++.h>
#define M 5010
#define INF 0x3f3f3f3f
using namespace std;
int t,n,m,s,l,r,a[M],b[M],ka,kb;string x,y;
int pd()
{
	int i=1,j=1;ka=kb=n-m+1;s=l=r=0;
	while(i<=n&&j<=m)
	{
		if(x[i]==y[j])++i,++j;
		else
		{
			b[--ka]=i;
			++i;
		}
	}
	if(j!=m+1)return 1;
	while(i<=n)
	{
		b[--ka]=i;
		++i;
	}
//	l=a[ka];
	i=n,j=m;
	while(i&&j)
	{
		if(x[i]==y[j])--i,--j;
		else 
		{
			a[--kb]=i;
			--i;
		}
	}
	while(i)
	{
		a[--kb]=i;
		--i;
	}
//	r=b[kb];
//	s=min(n-m+l+1,n-r+1);
//	cout<<s<<"!\n";
	return 0;
}
int main()
{
	std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>t;
	while(t--)
	{
		cin>>n>>m>>x>>y;
		x=" "+x,y=" "+y;
		if(n<m||pd())
		{
			cout<<"-1\n";
			continue;
		}
		else if(n==m)
		{
			cout<<"0\n";
			continue;
		}
		s=min(a[n-m]+1+n-m,n-b[n-m]+1);
		for(register int i=1;i<n-m;i++)
			s=min(s,a[i]+1+i+n-b[n-m-i]+1);
		cout<<s<<'\n';
	}
	return 0;
}

回复

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

正在加载回复...