题目链接:点击查看

题目大意:给出n个字符串,现在有两个人玩一个游戏,游戏规则是两人轮流构造同一个字符串,每次可以向末尾添加一个字母,必须保证添加字母后的字符串是n个字符串其中之一的前缀,不能操作者算输,两个人需要进行k次游戏,第一次游戏由先手开始,之后输掉本局游戏的人为下一局游戏的先手,现在问谁能赢得最后一局的游戏

题目分析:考虑到需要对数量较大的前缀进行操作,我们可以使用字典树来维护,这样整个题目就变成了字典树上的博弈,我们可以从叶子结点的状态不断向上转移,最后转移到字典树的根节点,又因为字典树的根节点是一个不存在的结点,所以我们对每个节点定义为:接下来一步的状态,因为最后无法操作的人会输掉比赛,所以叶子结点就是必败态,要分清楚我们现在有四个状态:

  1. 必胜态
  2. 必败态
  3. 可胜可败态
  4. 不可胜也不可败态

显然状态一二互斥,状态三四互斥,这样一来将状态转移到根节点然后分类讨论就是答案了:

  1. 先手必胜:则进行轮次为奇数时,先手获胜,否则后手获胜
  2. 先手必败:则先手必败后下一局还是先手开始,会一直必败,显然后手获胜
  3. 可胜可败:先手会故意让自己一直输,一直先手,最后一局的时候胜利,所以先手获胜
  4. 不可胜也不可败:因为先手无论如何操作,下一次的操作权就交给后手了,此时后手就是可胜可败态,同上面的第三条,所以后手获胜

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<cmath>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;char s[N];int trie[N][26],cnt,val[N];void insert()
{int pos=0;for(int i=0;s[i];i++){int to=s[i]-'a';if(!trie[pos][to])trie[pos][to]=++cnt;pos=trie[pos][to];}
}void dfs(int pos)//val 1:必败 2:必胜 3:可胜可败 4:不能确定
{bool win=false;//必胜bool lose=false;//必败 bool flag=true;//是否为子节点 for(int i=0;i<26;i++)if(trie[pos][i]){dfs(trie[pos][i]);if(val[trie[pos][i]]==1||val[trie[pos][i]]==4)win=true;if(val[trie[pos][i]]==2||val[trie[pos][i]]==4)lose=true; flag=false;}if(flag)val[pos]=1;else{if(win&&lose)val[pos]=3;else if(win)val[pos]=2;else if(lose)val[pos]=1;elseval[pos]=4;}
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,m;scanf("%d%d",&n,&m);while(n--){scanf("%s",s);insert();}dfs(0);if(val[0]==1){puts("Second");}else if(val[0]==2){if(m&1)puts("First");elseputs("Second");}else if(val[0]==3){puts("First");}else{puts("Second");}return 0;
}

CodeForces - 456D A Lot of Games(字典树+博弈)相关推荐

  1. Codeforces 455B A Lot of Games(字典树+博弈)

    题目连接: Codeforces 455B A Lot of Games 题目大意:给定n,表示字符串集合.给定k,表示进行了k次游戏,然后是n个字符串.每局开始,字符串为空串,然后两人轮流在末尾追加 ...

  2. 【CodeForces】445B A Lot of Games 字典树博弈

    传送门:[CodeForces]445B  A Lot of Games 题目大意:两人一起构造一个串,每人每次向串的末尾放一个字母,必须保证放了这个字母后能够成所给的N个串的前缀,如果某个人不能放时 ...

  3. Codeforces 861D - Polycarp's phone book 字典树/hash

    输入7e4个字符串,要求每个串提取一个子串来唯一表示 4s题可以hash暴力水过,大体思路就是把所有子串map自己的母串,过程中如果这个子串已有hash值就标-1 然后枚举map元素,维护最小化一下就 ...

  4. CodeForces - 858D Polycarp's phone book(字典树/map)

    题目链接:点击查看 题目大意:给出n个电话号码,每个电话号码都由9位数字组成,我们需要输出每个电话号码的最小关键词,最小关键词是指当输入这个关键词后,只能与当前的电话号码的其中一段匹配,而不能和其他电 ...

  5. 字典树+博弈 CF 455B A Lot of Games(接龙游戏)

    题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...

  6. CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)

    题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai​⊕aj​,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...

  7. CodeForces - 1476E Pattern Matching(字典树+拓扑)

    题目链接:点击查看 题目大意:给出 nnn 个模式串和 mmm 个匹配串,题目要求输出一种模式串的排列方式,使得 mmm 个模式串从头开始匹配的话,可以匹配到相应的模式串 模式串的长度不超过 444, ...

  8. codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)

    题目链接:http://codeforces.com/contest/842/problem/D 题解:像这种求一段异或什么的都可以考虑用字典树而且mex显然可以利用贪心+01字典树,和线段树差不多就 ...

  9. Educational Codeforces Round 23:E. Choosing The Commander(字典树01异或)

    Educational Codeforces Round 23:E. Choosing The Commander(字典树01异或) 题意: 3种操作: 1 插入一个数 2 删除一个数 3 给出一个数 ...

最新文章

  1. jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常
  2. windows剪切板暂存
  3. 【Fiddler 问题】解决关于Fiddler 抓包中,手机网络配置代理后,无法上网
  4. AI即开即用,这是悄然推出的“腾讯最新AI技术”小程序
  5. 9.3 寻找magic index
  6. 还在用Json-lib?面对疾风吧!
  7. Android框架揭秘-Android服务概要笔记
  8. SDRAM控制器仿真
  9. 弹性盒子flex布局实现骰子六个面并让骰子3D空间旋转
  10. USB(六)-HID(报告描述符的结构实现)
  11. P2P流媒体直播的疑问
  12. bzoj 3157: 国王奇遇记3516: 国王奇遇记加强版
  13. 总结 — 键盘输入特殊字符
  14. 富士胶片出展世界5G大会展示8K镜头等尖端产品
  15. 华为无线wifi无服务器,手机可用wifi 无服务器
  16. PMAC简介和预备知识
  17. 软考高级系统架构设计师:论分布式存储系统架构设计
  18. pclint html报告,PC-Lint使用报告.docx
  19. 移动办公行业已是钉钉、企微相斗?还早呢!
  20. 初体验python图片识别文字【Tesseract】OCR技术

热门文章

  1. Jasypt 加密-引言
  2. MySQL流程控制函数-if函数
  3. MySQL 高级 while循环
  4. Condition总结-await和signal的总结
  5. BeanFactory 和ApplicationContext 有什么区别?
  6. RocketMQ的发展历史
  7. kafka相关名称介绍
  8. 物理设计-如何存储日期类型
  9. qt combox选中消息_Qt+imx6编写的楼宇对讲管理平台
  10. python开发实习面试