Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
52552 野兽先辈——田所浩二 修复符文 C++ 通过 100 5 MS 1336 KB 974 2022-07-19 12:59:32

Tests(20/20):


#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N=5e5+5; int T,n,m,a,b,nex[N]; char s[N],t[N],tt[N]; void init() { for(int i=1; i<=n; i++) nex[i]=0; int j=0; for(int i=2; i<=n; i++) { while(j&&s[j+1]!=s[i]) j=nex[j]; if(s[j+1]==s[i]) j++; nex[i]=j; } } bool solve(char b[]) { int j=0; for(int i=1; i<=n; i++) { while(j&&s[j+1]!=b[i]) j=nex[j]; if(s[j+1]==b[i]) j++; } for(int i=j+1; i<=n; i++) if(s[i]!=b[i-j]) return 0; return (n-j)%m==0; } int gcd(int x,int y) { if(!y) return x; return gcd(y,x%y); } int main() { scanf("%d",&T); while(T--) { scanf("%s%s%d%d",s+1,t+1,&a,&b); n=strlen(s+1); m=a>b ? a-b:b-a; m=gcd(n,m); memcpy(tt,t,sizeof(t)); reverse(tt+1,tt+a+1); reverse(tt+a+1,tt+n+1); if(solve(t)||solve(tt)) puts("yes"); else puts("no"); } return 0; }


测评信息: