传送门

题目大意

  给出两个字符串,一个大的是S一个小的是T(1=<T<=S<=100000)。有两个人在Van♂Usee~,依次删掉S的当前最前或当前最后的字符,如果最后剩下的字符串和T相同的话,后手获胜,否则先手获胜。

分析

  先确定一下后手获胜的情况,因为考虑先手的情况不是很好做。如果不考虑删除的顺序什么的,那么就是在S里面找一个T就可以了,所以S里每一个与T相匹配的位置就是后手想达到的状态了。想到这里,我们就可以用kmp预处理一下S中所有与T匹配的位置了。

  相对的,先手肯定就和他对♂着♂干♂嘛,把自己的快♂乐建立在别人的痛♂苦之上。。。那么就先设一个状态f[i][j][k]表示Van♂到第i位前面删了j个后面删了k个的获胜情况,因为操作次数是确定的,那么当前操作是谁做的也可以很轻松的推出来。因为两人是交替操作的,所以如果后手在j-1或者k-1是可以获胜的(假设当前是先手操作),那么先手一定在现在这个位置把后手给弄死。再考虑后手,如果第i位是可以匹配的,那么后手能获胜的情况就只有j-1和k-1都为true,因为如果有任意一方不为true的话,先手都可以在开始的时候往那个方向删一个,那就永远跳不回来了。

  然而这样转移时间是会炸的,所以考虑压缩一下状态。把j,k表示成k-j,这样用k-j+1和k-j-1就可以推出现在的状态了,但是S-T的奇偶是会影响结果的,因为当S-T为偶数时,最后一次是后手操作,那么后手可以把上一次的操作挪一挪变成true,所以我们把问题转换成全是偶数的情况。

  设目标状态为x(后手获胜时后面删的-前面删的,可能有多个x),如果有x==0的话,那很明显先手无论怎么都凉了。那如果有x==2但没有x==-2的话,先手可以和后手在原点和1,-1之间一直纠缠,反之亦然。那如果既有x==2,又有x==-2的话,不管先手往哪边走,后手都可以模仿ta操作,从而在[-1,-2]或者[1,2]之间纠缠,然而后手最后操作,所以这种情况后手是稳赢的。

  到此,可以得出后手获胜的条件有x==0或(x==2&&x==-2),实际操作时,直接记录下所有可能的目标状态,再遍历一下看有没有我们想要的就可以了。

  最后感谢出题大爷的奇数处理方法,ta的blog。

code

#include<bits/stdc++.h>
#define maxn 100010
using namespace std;
int T,n,m,nxt[maxn],ans[maxn],tot,js[maxn],cnt;
char a[maxn],b[maxn];
void qnxt(char *s,int l)
{nxt[0]=-1;for(int i=1,k=-1; i<l; i++){while(k>-1 && s[i]!=s[k+1]) k=nxt[k];if(s[k+1]==s[i]) k++;nxt[i]=k;}
}
void kmp(char *s,char *p,int l1,int l2)
{for(int i=0,k=-1; i<l1; i++){while(k>-1 && s[i]!=p[k+1]) k=nxt[k];if(s[i]==p[k+1]) k++;if(k==l2-1){int l=i-l2+1,r=l1-1-i;if(!((l1-l2)&1)) ans[++tot]=r-l;else js[++cnt]=r-l;k=nxt[k];}}
}
int main()
{scanf("%d",&T);while(T--){memset(nxt,0,sizeof nxt);tot=cnt=0;scanf("%s%s",a,b);n=strlen(a),m=strlen(b);if(n==m){if(!strcmp(a,b)) printf("pty\n");else printf("cqf\n");continue ;}qnxt(b,m);kmp(a,b,n,m);if((n-m)%2){sort(js+1,js+1+cnt);for(int i=2; i<=cnt; i++) if(js[i]-js[i-1]==2) ans[++tot]=js[i]-1;}bool t1=0,t2=0,t3=0;for(int i=1; i<=tot; i++){if(!ans[i]) t3=1;if(ans[i]==2) t1=1;if(ans[i]==-2) t2=1;}if(t3||(t1&&t2)) printf("pty\n");else printf("cqf\n");}return 0;
}

转载于:https://www.cnblogs.com/wCTSd/p/9823147.html

JZOJ5912 Van♂Usee相关推荐

  1. 将大核卷积分三步,清华胡事民、南开程明明团队全新视觉骨干VAN,超越SOTA ViT和CNN...

    来源:机器之心 来自清华大学和南开大学的研究者提出了一种新型大核注意力(large kernel attention,LKA)模块,并在 LKA 的基础上构建了一种性能超越 SOTA 视觉 trans ...

  2. van Emda Boas

    van Emda Boas维护了一个整数集合[0,Max)(无重复),其中Max必须等于2的正整数次幂.它支持以下操作: (1)插入一个数字; (2)删除一个数字: (3)询问某一个数字在不在这个集合 ...

  3. 美国康奈尔大学计算机科学的教授,美国康奈尔大学教授Robbert van Renesse访问并做学术报告...

    美国康奈尔大学教授Robbert van Renesse于10月20日访问信息存储及应用实验室,并在下午武汉光电国家实验室A101带来了一场精彩的学术报告.Robbert教授带来了题为"Bi ...

  4. BZOJ 3685: 普通van Emde Boas树( 线段树 )

    建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...

  5. 低差异序列:范德科皮特序列(Van der Corput sequence)

    一.低差异序列 在数学中,低差异序列是具有以下性质的序列:对小于 N 的所有值排成序列,其子序列  这些值,具有低差异(就是均匀分割[0,N]集合区域).或者说, 其子序列  几乎均匀分布,与有序刚好 ...

  6. Python 之父 Guido van Rossum 宣布

    Python 之父 Guido van Rossum 在推特公布了自己从 Dropbox 公司离职的消息,并表示已经退休.他还提到自己在 Dropbox 担任工程师期间学到了很多东西 -- Pytho ...

  7. Python 之父 Guido van Rossum 退休失败,正式加入微软搞开源!

    今天,Python 之父 Guido van Rossum 在 Twitter 上正式宣布,退休太无聊,如今加入了微软开发者部门. Guido van Rossum 去年宣布退出 Python 核心决 ...

  8. guido发布python版本的年份_Guido van Rossum

    [单选题]以下常量的定义,合法的是 . [判断题]主题选择是整个采访的灵魂. [填空题]地下工程泛指建造在地面以下土层或岩层中的各种 与设施,是地层中所建工程的总称. [单选题]0.048657168 ...

  9. 博弈论(van♂游戏) 笔记

    博客观赏效果更佳 前言 会持续更新的呢,毕竟博弈论是个毒瘤啊. 其实不要以为博弈论很变态,它是很有趣的.能理解透的话,一点都不难.其实,博弈论的本质,就是教你van♂游戏啊! 从一个简单的问题(Nim ...

最新文章

  1. Matlab程序咨询,书上程序4-5问题咨询
  2. Android2.2 API 中文文档系列(7) —— ImageButton
  3. 【Kotlin】Kotlin 自定义组件 ( 自定义 View | 自定义 SurfaceView )
  4. DL之DNN优化技术:神经网络算法简介之数据训练优化【mini-batch技术+etc】
  5. 蓝桥杯-8-1因式分解(java)
  6. 5、mybatis中的映射器
  7. 反射setAccessible()方法
  8. textarea中输入多个空格或者换行时只显示一个空格的解决办法
  9. [论文阅读笔记29]生物医学文本摘要(Biomedical Text Summarization)
  10. 一个商品SKU是怎么生成的
  11. 这一次的互联网寒冬,又会有多少人倒下?
  12. 引导从打游戏到学计算机,【润笙学堂】暑假孩子沉迷游戏?妈妈一招化解!
  13. excel编程系列基础:认识VBA的编辑器VBE
  14. 文科生能学计算机专业难吗,文科生能读计算机科学专业吗?
  15. 设计模式----仲裁者模式(Mediator Pattern)例题
  16. 基于语料库的汉语形容词宾语与名词句法语义关系分析
  17. 考生合格证书打印的部分代码和生成证书方法
  18. linux指令_周东海
  19. 【新闻推荐系统】(task1)系统搭建基本流程
  20. 如何启动/停止/重启MySQL + 进入MYSQL

热门文章

  1. 《C语言程序设计》第4版 何钦铭、颜晖主编 课后习题答案 第12章 课后习题
  2. logo设计的方法和技巧
  3. 用Python分析周杰伦歌曲并进行数据可视化
  4. 俞敏洪:人生最重要的两件事是什么?
  5. 游戏视觉内容逆向破解
  6. 关于主机连wife 虚拟机linux系统上网问题解决(基于centos7)
  7. MySQL-01.深入理解MySQL底层数据结构
  8. 中国电信无线网服务器,如何使用路由器共享电信天翼无线网络?
  9. Python学习笔记 -一到五
  10. 什么是APP封装?APP封装有什么途径?