社区讨论
刚刚的 ABC E 求助
题目总版参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lp48fnim
- 此快照首次捕获于
- 2023/11/18 23:57 2 年前
- 此快照最后确认于
- 2023/11/19 10:01 2 年前
名称包含 "random2y" 的 testcases 全 WA,另外 killer 也错了两个。
有人知道怎么回事吗?
CPP#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for (int i = a; i <= b; i++)
#define REP(i, a, b) for (int i = a; i >= b; i--)
const int maxn=2e5+5;
bool dp[maxn];
int n;
int m;
char s[maxn],t[maxn];
int chk(int l,int r,int pre)
{
int mx=l-1;
int p1=l,p2=1;
while(p1<=r)
{
if(s[p1]!=t[p2])mx=p1;
p1++,p2++;
}
return mx;
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",s+1);
scanf("%s",t+1);
dp[0]=1;
FOR(i,m,n)
{
// printf("%d th\n",i);
REP(j,i,i-m+1)
{
if(s[j]!=t[j-(i-m+1)+1])break;
// printf("j = %d\n",j);
if(j!=i-m+1)
{
dp[i]|=dp[j-1];
}
else
{
dp[i]|=dp[j-1];
int lw=1e9;
FOR(k,1,m)
{
if(j-1-k+1<=0)break;
lw=min(lw,chk(j-1-k+1,j-1,k));
}
FOR(k,lw,j-1)dp[i]|=dp[k];
}
}
// printf("ok = %d\n",dp[i]);
}
puts(dp[n]?"Yes":"No");
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...