Codeforces 455B A Lot of Games(字典树+博弈)
2014-08-09 11:55
423 查看
题目连接: Codeforces 455B A Lot of Games
题目大意:给定n,表示字符串集合。给定k,表示进行了k次游戏,然后是n个字符串。每局开始,字符串为空串,然后两人轮流在末尾追加字符,保证新的字符串为集合中某字符串的前缀,不能操作者输,新一轮由上一句输的人先手。
解题思路:首先对字符集合建立字典树,然后根据博弈的必胜必败性质搜索出先手的决策状态,可决定胜败3,只能胜利2,只能失败1,不可掌控(即对手可决定胜败)0。
对于状态3,为必胜,可以采用前K-1场败,然后保证第K场自己先手,取必胜方案。
对于状态2,无论则们走都是赢的话,肯定是两个人轮流胜局,所以判断K的奇偶性。
对于状态1和0,必败,因为一直输,一直先手。
题目大意:给定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 字典树 博弈
- codeforces 455B A Lot of Games(博弈,字典树)
- 【字典树+dp】 codeforces 455B A Lot of Games
- Codeforces 455B A Lot of Games(博弈)
- codeforces 455B A Lot of Games(博弈,字典树)
- Codeforces 455B A Lot of Games 字典树上博弈
- 字典树+博弈 CF 455B A Lot of Games(接龙游戏)
- Codeforces 455B A Lot of Games 字典树上博弈
- 【CodeForces】445B A Lot of Games 字典树博弈
- codeforces 455B A Lot of Games
- Codeforces 455B A Lot of Games(字典树+博弈)
- Codeforces 455B A Lot of Games
- CodeForces 455B A Lot of Games
- Codeforces 706D Vasiliy's Multiset(异或字典树)
- codeforces 727E. Games on a CD(双Hash
- Vasya and Chess - CodeForces 493 D 博弈
- codeforces 706D(字典树)
- 【CodeForces】Plate Game(博弈)
- CodeForces-731E Funny Game(DP+Games)
- CodeForces 630 R. Game【博弈】