Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
52304 野兽先辈——田所浩二 修复符文 C++ 解答错误 20 7 MS 1832 KB 1007 2022-07-19 11:52:01

Tests(4/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],ttt[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));memcpy(ttt,t,sizeof(t)); reverse(tt+1,tt+a+1);reverse(tt+a+1,tt+n+1); reverse(ttt+1,tt+b+1);reverse(ttt+b+1,ttt+n+1); if(solve(t)||solve(tt)||solve(ttt)) puts("yes"); else puts("no"); } return 0; }


测评信息: