[思維][暴力] Jzoj P5912 VanUSee
阿新 • • 發佈:2018-10-19
有著 回收 while sam 操作 inpu name pty -a
題解
-
首先,當|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\n"); else printf("cqf\n"); 27 } 28 }
[思維][暴力] Jzoj P5912 VanUSee