题目连接: Codeforces 455B A Lot of Games

题目大意:给定n,表示字符串集合。给定k,表示进行了k次游戏,然后是n个字符串。每局开始,字符串为空串,然后两人轮流在末尾追加字符,保证新的字符串为集合中某字符串的前缀,不能操作者输,新一轮由上一句输的人先手。

解题思路:首先对字符集合建立字典树,然后根据博弈的必胜必败性质搜索出先手的决策状态,可决定胜败3,只能胜利2,只能失败1,不可掌控(即对手可决定胜败)0。
对于状态3,为必胜,可以采用前K-1场败,然后保证第K场自己先手,取必胜方案。
对于状态2,无论则们走都是赢的话,肯定是两个人轮流胜局,所以判断K的奇偶性。
对于状态1和0,必败,因为一直输,一直先手。

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;
const int maxn = 1e5+5;struct node {int val, arr[30];node () {val = 0;memset(arr, 0, sizeof(arr));}
}t[maxn*2];int top = 1, len, n, k;
char str[maxn];inline int get_node () {return top++;
}void insert (int x, int d) {if (d == len)return;int mv = str[d] - 'a';if (t[x].arr[mv] == 0)t[x].arr[mv] = get_node();insert(t[x].arr[mv], d+1);
}int solve (int x) {int& ans = t[x].val;ans = 0;bool flag = true;for (int i = 0; i < 26; i++) {if (t[x].arr[i]) {flag = false;ans |= solve(t[x].arr[i]);}}if (flag)ans = 1;return 3-ans;
}int main () {scanf("%d%d", &n, &k);for (int i = 0; i < n; i++) {scanf("%s", str);len = strlen(str);insert(0, 0);}solve(0);int ans = t[0].val;if (ans < 2)printf("Second\n");else if (ans == 2)printf("%s\n", k&1 ? "First" : "Second");elseprintf("First\n");return 0;
}

Codeforces 455B A Lot of Games(字典树+博弈)相关推荐

  1. CodeForces - 456D A Lot of Games(字典树+博弈)

    题目链接:点击查看 题目大意:给出n个字符串,现在有两个人玩一个游戏,游戏规则是两人轮流构造同一个字符串,每次可以向末尾添加一个字母,必须保证添加字母后的字符串是n个字符串其中之一的前缀,不能操作者算 ...

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

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

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

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

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

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

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

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

  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. SalttSack自动化运维(四)——JINJA模块
  2. 在Spring中使用JDK定时器实现调度任务
  3. V-3-3 在没有vCenter的情况下,复制虚拟机
  4. CentOS Linux 7绑定静态IP方法
  5. mysql group by 查询慢_MySQL慢查询优化(线上案例调优)
  6. 图像滤镜艺术---(Instagram)1977滤镜
  7. NUC1399 Sum It Up【DFS】
  8. qmake构建项目详细讲解
  9. java md5方法 for Android
  10. Mat常用构造函数及IplImage 与Mat 之间的相互转换
  11. 结构化、半结构化、非结构化的理解
  12. layui 表格序号累加 翻页序号也累加
  13. 科学计算机已知角度和边长怎样算斜长,计算公式
  14. 微步在线:半年融资8亿,综合型网络安全“新贵”诞生
  15. mysql实验总结_数据库实验的心得体会.docx
  16. 软件安全性测试有那些
  17. 网络连接存储(Network-attached storage,NAS)简介
  18. linux amd显卡双屏,显示器的合理利用 ati显卡双屏详细设置【图文】
  19. 宏的录制——制作工资表
  20. ChatGPT新突破:打造自己的智能机器人控制系统

热门文章

  1. [第六篇]——云服务器之Spring Cloud直播商城 b2b2c电子商务技术总结
  2. 女神节表白:因一个分号被拒!
  3. 点菜系统使用场景01
  4. linux动态库的查找顺序
  5. zblogCMS插件-支持各种zblog主题
  6. 光敏电阻控制小灯泡的亮暗代码编写
  7. Opencv_14 直方图以及其应用
  8. 火绒安全警报:新型宏病毒通过Excel传播 暗刷2345网址站牟利
  9. SAP ABAP Smartform的使用
  10. MyEclipse8.6 破解以及注册码