题解
-
首先,当|S|-|T|为奇数时,cdf是最后一个操作的,那么他不想让字符串匹配
-
这样的话,如果pty要赢的话那只能把前面字符删掉也可以匹配、把后面字符删掉也可以匹配
- 如果|S|-|T|为偶数时,pty是最后一个操作的
-
如果0不是,并且-2和2不全是,那么cqf一定会朝不是的那一边走,pty无论如何都没有办法将它拉回到是的那一边了
-
因此pty会赢当且仅当0是目标状态或者-2和2都是目标状态
- S中要匹配的串应该是在|S|-|T|/2开始的,因为如果在前面一点的话,cqf一直删掉左边的也可以把原串删掉
代码
1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 int n,t,len1,len2,flag; 5 char l1[500010],l2[500010]; 6 bool pd(int x) 7 { 8 for (int i=1;i<=len2;i++) if (l1[x+i]!=l2[i]) return false; 9 return true; 10 } 11 int main() 12 { 13 freopen("vanusee.in","r",stdin),freopen("vanusee.out","w",stdout); 14 scanf("%d",&t); 15 while (t--) 16 { 17 scanf("%s%s",l1+1,l2+1); 18 len1=strlen(l1+1),len2=strlen(l2+1),flag=0; 19 if (len1==len2) 20 { 21 if (pd(0)) flag=1; 22 } 23 else 24 if ((len1-len2)%2==1) flag=pd((len1-len2-1)/2)&&pd((len1-len2+1)/2); 25 else flag=pd((len1-len2)/2)||pd((len1-len2-2)/2)||pd((len1-len2+2)/2); 26 if (flag==1) printf("pty "); else printf("cqf "); 27 } 28 }