题目链接:

https://jzoj.net/senior/#contest/show/2530/2

题目:

众所周知,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手的你。

题解:

我们简化状态,设当前左边取了l个,右边取了r个,状态定义为r-l

一开始状态为0,每次操作都让它+1或者-1。双方轮流操作,总共操作|S|-|T|次,显然最终状态的奇偶相同

考虑当|S|-|T|是奇数的时候,最后一次操作是先手做,它肯定往不是目标状态走,那么一个位置i在最后一次操作前是目标状态当且仅当它和它-1都是目标状态(目标状态指的是S中i-m+1~i这一段和T完全一样)

于是全部转化为|S|-|T|为偶数的情况

假如 0 是目标状态,那么显然后手会赢,因为无论先手往哪里走后手都可以把他拉 回来

如果 0 不是,并且-2 和 2 不全是,那么先手一定会朝不是的那一边走,后手无论 如何都没有办法将它拉回到是的那一边了

因此后手会赢当且仅当 0 是目标状态或者-2 和 2 都是目标状态 否则都是先手赢

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; const int N=1e5+;
int t;
int nxt[N],goal[N<<],pos[N];
char a[N],b[N];
int main()
{
freopen("vanusee.in","r",stdin);
freopen("vanusee.out","w",stdout);
scanf("%d",&t);
while (t--)
{
scanf("%s",a+);
int n=strlen(a+);
scanf("%s",b+);
int m=strlen(b+);
memset(nxt,,sizeof(nxt));
memset(goal,,sizeof(goal));
memset(pos,,sizeof(pos));
for (int i=,j=;i<=m;i++)
{
while (j&&b[j+]!=b[i]) j=nxt[j];
if (b[j+]==b[i]) ++j;
nxt[i]=j;
}
for (int i=,j=;i<=n;i++)
{
while (j&&(b[j+]!=a[i]||j==m)) j=nxt[j];
if (b[j+]==a[i]) ++j;
if (j==m) pos[i]=;
}
if ((n-m)&) for (int i=;i<=n;i++) goal[n+m-*i++n]=pos[i-]&pos[i];
else for (int i=;i<=n;i++) goal[n+m-*i+n]=pos[i];
if (goal[n]||(goal[n-]&&goal[n+])) puts("pty");
else puts("cqf");
}
return ;
}

[JZOJ 5912] [NOIP2018模拟10.18] VanUSee 解题报告 (KMP+博弈)的更多相关文章

  1. [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...

  2. [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)

    题目链接: http://172.16.0.132/senior/#contest/show/2530/1 题目: EZ同学家里非常富有,但又极其的谦虚,说话又好听,是个不可多得的人才.        ...

  3. [JZOJ 5895] [NOIP2018模拟10.5] 旅游 解题报告 (欧拉回路+最小生成树)

    题目链接: https://jzoj.net/senior/#main/show/5895 题目: 题解: 有一个好像比较显然的性质,就是每条边最多经过两次 那么我们考虑哪些边需要经过两次.我们把需要 ...

  4. [JZOJ 5906] [NOIP2018模拟10.15] 传送门 解题报告(树形DP)

    题目链接: https://jzoj.net/senior/#contest/show/2528/2 题目: 8102年,Normalgod在GLaDOS的帮助下,研制出了传送枪.但GLaDOS想把传 ...

  5. [JZOJ 5894] [NOIP2018模拟10.5] 同余方程 解题报告(容斥)

    题目链接: http://172.16.0.132/senior/#contest/show/2523/0 题目: 题解:(部分内容来自https://blog.csdn.net/gmh77/arti ...

  6. [jzoj 5926] [NOIP2018模拟10.25] naive 的图 解题报告(kruskal重构树+二维数点)

    题目链接: https://jzoj.net/senior/#main/show/5926 题目: 题解: 显然最小的最大路径在最小生成树上(最小生成树=最小瓶颈生成树) 于是我们建出kruskal重 ...

  7. [JZOJ 5893] [NOIP2018模拟10.4] 括号序列 解题报告 (Hash+栈+map)

    题目链接: https://jzoj.net/senior/#main/show/5893 题目: 题解: 考虑暴力怎么做,我们枚举左端点,维护一个栈,依次加入元素,与栈顶元素和栈内第二个元素相同时弹 ...

  8. [JZOJ 5908] [NOIP2018模拟10.16] 开荒(kaihuang)解题报告 (树状数组+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2529/1 题目: 题目背景:尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门.他加入师门 ...

  9. [JZOJ 5909] [NOIP2018模拟10.16] 跑商(paoshang) 解题报告 (圆方树)

    题目链接: https://jzoj.net/senior/#contest/show/2529/2 题目: 题目背景:尊者神高达很穷,所以他需要跑商来赚钱题目描述:基三的地图可以看做 n 个城市,m ...

随机推荐

  1. SAN和NAS

    SAN针对海量.面向数据块的数据传输,而NAS则提供文件级的数据访问功能. SAN和NAS都基于开放的.业界标准的网络协议:用于SAN的光纤通道协议和用于NAS的网络协议(如TCP/IP). SAN的 ...

  2. [SCOI 2008] 奖励关

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1076 [算法] f[i][S]表示当前第i次抛出宝物,目前集合为S,所能获得的最高分 ...

  3. C# Keywords - is

    记录一下在日常开发过程中遇到的一些C# 基础编程的知识!希望以后能用的着.知识是在平常的开发过程中去学到的.只有用到了,你才能深入的理解它,并用好它. 本资料来源于:MSND下面是一些相关的code ...

  4. Ubuntu下推荐安装软件

    前言:都是全平台软件,通用性好. 1.搜狗输入法 官网下载: 不能双击.deb安装成功,需要安装依赖,可参考:https://www.cnblogs.com/chendeqiang/p/1017741 ...

  5. Centos7 minimal 系列之Redis共享sessionid(七)

    这一章节的内容就当看看,只是个人理解,我想应该是有误的. 一.SessionId sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessioni ...

  6. 动态数组C++实现

    回顾大二的数据结构知识.从数组开始.实现了一个可自动扩充容量的泛型数组. 头文件:Array.h #ifndef Array_hpp #define Array_hpp template <cl ...

  7. Html5必看:教你如何选择移动APP开发框架

    如何选择移动APP开发框架一直是困扰很多新手的难题,今天杭州APP开发小编就和大家一起分享一下HTML5 移动app开发过程中框架该如何选择?当然我们得先从下面几个方面来评估一个框架的优越性,然后再做 ...

  8. Win7下安装Flash低版本

    我把HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\SafeVersions中高于要装的版本的项目都删了,还是不行. 看了这个帖子后发现,原来64 ...

  9. mysql定时清理binlog

    一.没有主从同步的情况下清理日志 mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY) ...

  10. Pyhton学习——Day34

    # 任何语言都会发生多线程,会出现不同步的问题,同步锁.死锁.递归锁# 异步: 多任务, 多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线# 同步: 多任务 ...