【JZOJ A组】VanUSee

版权声明:转载者乖乖♂站好 https://blog.csdn.net/Eric1561759334/article/details/83175872

Description

众所周知,cqf童鞋对哲学有着深入的理解和认识,并常常将哲学思想应用在实际生活中,例如锻炼摔角技术或者研究化(fa)学。
由于cqf童鞋哲学造诣太过高深,以至于影响到了pty,他们常常给在一块VanUSee。Van的都是一些像“装备回收交易自由”、“开局一条鲲进化全靠吞”、“今晚八点是兄弟就来肝”这样高端大气上档次的著名USee。
有一天他们决定Van一个亲民的USee来和大家分享他们的哲学心路历程
规则是这样的:
“给定两个串S和T,|S| >= |T|。
cqf和pty轮流操作串S,cqf先手。
对于每次操作,cqf或pty会选择删掉S的第一位或最后一位。
当操作以后的串的长度等于|T|时,游戏停止。
如果停止时的串=T,则pty获胜,否则cqf获胜。”
cqf和pty的哲学思维都很强,他们都能采取最优的策略来行动
作为高级玩家的苏巴先生在一旁观战,他早已看穿了这个USee的本质,当两个串给出的那一瞬间胜负已分,然而不是所有围观者的水平都像苏巴先生那么高,其中也没有五年级的积分小哥,他们又想知道结果,于是围观者们找到了能预见一局围棋接下来40手的你。

Input

有多组数据
第一行一个正整数t表示数据组数
接下来t组数据,每组数据两行,接下来总共2t行
第一行一个字符串S
第二行一个字符串T
字符串仅由小写字符组成

Output

t行,对于每一组数据输出双方都是最优策略时谁是赢家(“cqf”或者“pty”,不含引号,小写)

Sample Input

5
aba
b
bab
b
aaab
ab
xyz
mnk
xyz
xyz

Sample Output

pty
pty
cqf
cqf
pty
样例解释:
对于第一组S=“aba”,T=“b”
cqf无论删掉头还是尾,pty都可以删掉另一个来使剩下的是“b”
对于第三组S=“aaab”,T=“ab”
cqf只需第一次删掉“b”,以后就永远不能达到“ab”了

Data Constraint

对于30%的数据,1<=|T|<=|S|<=20
对于100%的数据,1<=t<=10 1<=|T|<=|S|<=100000

Hint

这题确实很有趣。

思路

千万不要被样例迷惑!!!

当|S|-|T|为奇数时,最后一次操作是先手做,它肯定往不是目标状态走,那么一个
位置在最后一次操作前是目标状态当且仅当它+1 它-1 都是目标状态
现在就全部转化成|S|-|T|为偶数的情况
假如 0 是目标状态,那么显然后手会赢,因为无论先手往哪里走后手都可以把他拉
回来
如果 0 不是,并且-2 和 2 不全是,那么先手一定会朝不是的那一边走,后手无论
如何都没有办法将它拉回到是的那一边了
因此后手会赢当且仅当 0 是目标状态或者-2 和 2 都是目标状态
否则都是先手赢

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=5e5+77;
int t,l1,l2;
char st1[N],st2[N];
bool check(int x)
{
	for(int i=1; i<=l2; i++)
	{
		if(st1[x+i]!=st2[i]) return 0;
	}
	return 1;
}
int main()
{
	freopen("vanusee.in","r",stdin),freopen("vanusee.out","w",stdout);
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s%s",st1+1,st2+1);
		l1=strlen(st1+1),l2=strlen(st2+1);
		if(l1==l2&&check(l1))
		{
			printf("pty\n"); continue;
		}else
		if((l1-l2)%2==1)
		{
			if(check((l1-l2-1)/2)&&check((l1-l2+1)/2))
			{
				printf("pty\n"); continue;
			}else
			{
				printf("cqf\n"); continue;
			}
		}else
		{
			if(check((l1-l2)/2)||check((l1-l2-2)/2)&&check((l1-l2+2)/2))
			{
				printf("pty\n"); continue;
			}else
			{
				printf("cqf\n"); continue;
			}
		}
	}
} 

猜你喜欢

转载自blog.csdn.net/Eric1561759334/article/details/83175872