分析
首先我们知道,最优策略就是和对方进行相反操作(显而易见)
然后我们先讨论串一减掉串二剩下字符个数为偶数的情况
首先如果有个字符串在正中间pty必赢
然后我们考虑字符串各往左右偏移一格的情况
pty可以在对方删掉一边以后再删一次那一边,然后对方为了赢会反转操作,那么就可以向左/右多进一格,也只能多进一个
那么偶数情况只有两种:
1、正中间
2、中间左右各偏移一格都是串二
考虑奇数,容易想到和偶数也差不多一个情况(2)
#include <iostream> #include <cstdio> #include <cstring> using namespace std; string a,b; int main() { freopen("vanusee.in","r",stdin); freopen("vanusee.out","w",stdout); int t; scanf("%d",&t); while (t--) { cin>>a>>b; int l1=a.length(),l2=b.length(); if (l1<=l2) { if (a==b) { printf("pty "); continue; } printf("cqf "); continue; } if (!((l1-l2)%2)) { string aleft=a.substr((l1-l2>>1)-1,l2), amid=a.substr((l1-l2>>1),l2), aright=a.substr((l1-l2>>1)+1,l2); if (aleft==aright&&aleft==b||amid==b) { printf("pty "); continue; } printf("cqf "); continue; } string aleft=a.substr(l1-l2>>1,l2), aright=a.substr((l1-l2>>1)+1,l2); if (aleft==aright&&aleft==b) printf("pty "); else printf("cqf "); } }