题目连接: 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");
else
printf("First\n");
return 0;
}

Codeforces 455B A Lot of Games(字典树+博弈)的更多相关文章

  1. Codeforces 455B A Lot of Games 字典树上博弈

    题目链接:点击打开链接 题意: 给定n个字符串,k局游戏 对于每局游戏,2个玩家轮流给一个空串加入一个小写字母使得加完后的字符串不是n个字符串的前缀. 输家下一轮先手 问是先手必胜还是后手必胜 思路: ...

  2. codeforces 455B A Lot of Games(博弈,字典树)

    题目 参考自博客:http://blog.csdn.net/keshuai19940722/article/details/38455269 //字典树,博弈 根据当前节点的后续来确定当前节点的状态, ...

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

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

  4. CodeForces 455B A Lot of Games (博弈论)

    A Lot of Games 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/J Description Andrew, Fedo ...

  5. Educational Codeforces Round 12 E. Beautiful Subarrays 字典树

    E. Beautiful Subarrays 题目连接: http://www.codeforces.com/contest/665/problem/E Description One day, ZS ...

  6. 【codeforces 514C】Watto and Mechanism(字典树做法)

    [题目链接]:http://codeforces.com/contest/514/problem/C [题意] 给你n个字符串; 然后给你m个询问;->m个字符串 对于每一个询问字符串 你需要在 ...

  7. codeforces 1285D. Dr. Evil Underscores(字典树)

    链接:https://codeforces.com/problemset/problem/1285/D 题意:给n个数a1,a2,a3.....an,找到一个数X,使得X 异或所有的ai ,得到的ma ...

  8. Codeforces 633 C Spy Syndrome 2 字典树

    题意:还是比较好理解 分析:把每个单词反转,建字典树,然后暴力匹配加密串 注:然后我就是特别不理解,上面那种能过,而且时间很短,但是我想反之亦然啊 我一开始写的是,把加密串进行反转,然后单词正着建字典 ...

  9. Codeforces 948D Perfect Security 【01字典树】

    <题目链接> 题目大意: 给定两个长度为n的序列,可以改变第二个序列中数的顺序,使得两个序列相同位置的数异或之后得到的新序列的字典序最小. 解题分析: 用01字典树来解决异或最值问题.因为 ...

随机推荐

  1. CSS3滤镜

    今天在办公室亲眼目睹了同事使用CSS3滤镜为一张漂亮的照片轮廓加上了阴影,瞬间亮瞎了我的的双眼,见笑了. 所以也迅速尝试使用CSS3滤镜让最新出炉的MUI LOGO也性感一把,试图来愉悦一下大家的双眼 ...

  2. 操作百度API

    string json = ""; try { //虽然两者都是异步请求事件,但是WebClient是基于事件的异步,而HttpWebRequst是基于代理的异步编程 WebCli ...

  3. jquery初学笔记

    官方网站:http://jquery.com/ 一个简单的JQuery实例: <!DOCTYPE html> <html lang="en" xmlns=&quo ...

  4. C++ enum 作用域问题和解决方案

    C++ 中的枚举类型继承于 C 语言.就像其他从 C 语言继承过来的很多特性一样,C++ 枚举也有缺点,这其中最显著的莫过于作用域问题--在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举 ...

  5. Bootstrap dropdown 使用

    同样是2种方式 参考http://www.bootcss.com/javascript.html#dropdowns JS方式调用 http://www.w3resource.com/twitter- ...

  6. Eclipse运行慢

    http://blog.csdn.net/chrissata/article/details/7759836 http://blog.csdn.net/heyutao007/article/detai ...

  7. 想精度高,可以考虑用c语言中的函数gettimeofday

    大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime ...

  8. 从事web前端两年半后的迷茫

    做了两年半的重构,突然有种迷茫的感觉,好像瓶颈了,不知道自己该怎么继续走下去,以前刚毕业的时候,总觉得自己有好多的东西要学在前端方面,所以有那个促使自己去学习的动力,每当没工作任务的时候,自己总是去主 ...

  9. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  10. readv和writev函数

    readv 和 writev 函数用于在一次函数调用中读.写多个非连续缓冲区.有时也将这两个函数称为散布读和聚集写. #include <sys/uio.h> ssize_t readv( ...