社区讨论

刚刚的 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 条回复,欢迎继续交流。

正在加载回复...