题目链接:点击打开链接

题意:

给定n个字符串,k局游戏

对于每局游戏,2个玩家轮流给一个空串加入一个小写字母使得加完后的字符串不是n个字符串的前缀。

输家下一轮先手

问是先手必胜还是后手必胜

思路:

对于第一局游戏,若先手能到达必败态和必胜态,则先手会一直输到倒数第二局然后最后一局必胜

所以此时是first

若先手是必胜态或者是必败态,则是轮流赢。跟k的奇偶有关

#include <cstdio>
#include <cstring>
#include<iostream>
#include <queue>
#include <set>
#include <map>
#include <string>
using namespace std;
#define Word_Len 100500
#define Sigma_size 26
#define ll int
struct Trie{ll ch[Word_Len][Sigma_size];     //Word_Len是字典树的节点数 若都是小写字母Sigma_size=26ll sz ;                         //当前节点数bool win[Word_Len], lost[Word_Len];ll Newnode(){memset(ch[sz], 0, sizeof(ch[sz])); return sz++;}void init()                            //初始化字典树{ sz = 0; Newnode();}//初始化ll idx(char c){return c-'a';}  //字符串编号void insert(char *s){    //把v数字加给 s单词最后一个字母ll u = 0, len = strlen(s);for(ll i = 0; i < len; i++){ll c = idx(s[i]);if(!ch[u][c])             //节点不存在就新建后附加ch[u][c] = Newnode();u = ch[u][c];}         //如今的u就是这个单词的最后一个位置}void dfs(int u){int cnt = 0;for(int i = 0; i < 26; i++)if(ch[u][i]){cnt++;int v = ch[u][i];dfs(v);if(win[v]==false)win[u] = true;if(lost[v]==false)lost[u] = true;}if(cnt==0)lost[u] = true;}
};
Trie ac;
int n, k;
void input(){ac.init();char s[100005];while(n--){scanf("%s", s);ac.insert(s);}
}
int main(){int i, j;while(~scanf("%d %d",&n,&k)){input();ac.dfs(0);if(ac.lost[0]==false && ac.win[0])puts(k&1 ?

"First":"Second"); else if(ac.win[0] && ac.lost[0]) puts("First"); else puts("Second"); } return 0; }

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

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

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

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

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

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

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

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

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

  5. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

  6. 莫队 ---- 值域分块处理优化字典树上的查询 杭电多校2021第二场1004 i love counting

    题目链接 题目大意: 就是给你nnn个数,mmm次询问 每次询问给你l,r,a,bl,r,a,bl,r,a,b问你在[l,r][l,r][l,r]区间里面有多少种种种数c(XOR)a≤bc(XOR)a ...

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

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

  8. Bless You Autocorrect!(字典树上建图)

    传送门:QAQ 题意:实现一个单词补全功能的最小操作步数 思路:对于读入的单词表,我们可以预处理出到达每个前缀所需要的最小步数,这我们可以实现建立一颗字典树,然后在字典树上跑bfs即可. 预处理完后, ...

  9. upc 6360: 词韵(字典树上dp)

    6360: 词韵 时间限制: 2 Sec  内存限制: 128 MB 提交: 134  解决: 18 [提交] [状态] [讨论版] [命题人:admin] 题目描述 Adrian 很喜欢诗歌中的韵. ...

  10. 51nod 1490: 多重游戏(树上博弈)

    题目链接 该题实质上是一个树上博弈的问题.要定义四种状态--2先手必胜 1先手必败 3可输可赢 0不能控制 叶子结点为先手必败态: 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态: 若某结点的 ...

最新文章

  1. 卓晴老师“标杆课教师“采访提纲
  2. 以58帮帮为例看58同城典型技术架构演变
  3. [译] 使用 Web3 和 Vue.js 来创建你的第一个以太坊 dAPP(第二部分)
  4. 互联网1分钟 |1127
  5. Feign深入学习(一)
  6. 请求的安全信息不可用或无法显示
  7. linux系统日常管理复习题讲解
  8. OpenCV3学习(10.2)codebook码书法实现背景剔除
  9. grafana + influxdb + telegraf , 构建性能监控平台
  10. 对于response.setContentType(MIME)的解释
  11. Divergent series
  12. HDU--2502 月之数
  13. SQL 中GROUP BY 、ROLLUP、CUBE 关系和区别
  14. python读取文件中的内容_python逐行读取文件内容的三种方法
  15. Matlab实现身份证号码快速识别
  16. reviewboard mysql_ReviewBoard-安装(Centos 7)
  17. Python词云_自定义图片做背景
  18. AddressBook获取用户信息
  19. 谷歌浏览器查看版本信息及个人资料路径的命令方法
  20. 学堂在线-清华大学-操作系统实验Lab1【练习5-6】

热门文章

  1. paip.语义分析--分词--常见的单音节字词 2_deDuli 单字词 774个
  2. 中国结算-金融机构服务平台(FISP平台)
  3. 信息系统集成企业该具备的资质您有几个呢?
  4. 移动API设计与安全存储
  5. (转)因巨亏而著名的10大魔鬼交易员
  6. 官宣!什么是新基建时代的混合云? | 凌云时刻
  7. 【语音去噪】基于matlab GUI软阈值+硬阈值+软硬折中阈值语音去噪【含Matlab源码 1810期】
  8. 毕设题目:Matlab图像增强
  9. 【人脸识别】基于matlab GUI FISHER人脸识别【含Matlab源码 605期】
  10. SPSS遇到缺失值怎么办?删除还是替换?【SPSS 067期】