A Lot of Games(Trie树 + 博弈)
题目链接:http://codeforces.com/contest/455/problem/B
题意:n, k 分别表示 字符串组数 和 比赛次数。 从一个空单词开始, a,b二人分别轮流往单词后添加一个字母,要求每次添加后的结果给字符串中至少其中一个的前缀, 无法继续添加者,该场比赛输, 下场比赛由前场输者为先手。第 k 次比赛的输赢表示总比赛的输赢。
题解:每场比赛先手共4情况:1。必赢 2。必输 3。想赢便赢, 想输便输 4 胜负无法自己把握 四种情况分别二进制表示 01, 10, 11, 00
当情况4时,只要后手 在前(k - 1)场输, 第k 场赢, 则后手必赢
当情况3时, 只要先手 在前(k - 1)场输,第k场赢, 则先手必赢
当情况2 时, 只要后手 每场均赢, 则时 先手一直为先手 , 则后手赢
当情况1时, 当 k 为奇数 先手赢, 可为偶数 后手赢 (从最后比赛往前推一下便可知道)
由此,可用字典树 , 子树的 最后一个节点标记res(01), 父节点 |= ~子节点, 可用 深搜完成
/***Good Luck***/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <stack>
#include <map>
#include <queue>
#include <vector>
#include <set>
#include <functional>
#include <cmath> #define Zero(a) memset(a, 0, sizeof(a))
#define Neg(a) memset(a, -1, sizeof(a))
#define All(a) a.begin(), a.end()
#define PB push_back
#define inf 0x3f3f3f3f
#define inf2 0x7fffffffffffffff
#define ll long long
using namespace std;
//#pragma comment(linker, "/STACK:102400000,102400000") typedef struct tree {
struct tree *br[];
int res;
}Node; Node* head = new Node; void Tree_Insert(char str[]) { //建树
Node *t, *s = head;
int i, j;
int len = strlen(str) - ;
for (i = ; i <= len; ++i) {
int id = str[i] - 'a';
if (s->br[id] == NULL) {
t = new Node;
for (j = ; j <= ; ++j) {
t->br[j] = NULL;
}
s->br[id] = t;
}
s = s->br[id];
}
s->res = ;
} void dfs(Node* u) {
int temp = ;
bool flag = false;
for (int i = ; i <= ; ++i) {
Node* tmp = u->br[i];
if (tmp) {
dfs(tmp);
temp |= ~(tmp->res); // 父节点 |= ~子节点
flag = true;
}
}
if (flag)
u->res = temp;
} int main() {
//freopen("data.out", "w", stdout);
//freopen("data.in", "r", stdin);
//cin.sync_with_stdio(false);
int n, k;
char s[];
cin >> n >> k;
for (int i = ; i <= ; ++i) {
head->br[i] = NULL;
}
for (int i = ; i < n; ++i) {
scanf("%s", s);
Tree_Insert(s);
}
dfs(head);
int ans = head->res & ;
if (ans == ) {
cout << "First" << endl;
return ;
} else if (ans == ) {
cout << "Second" << endl;
return ;
} else if (ans == ) {
cout << "Second" << endl;
return ;
} else {
if (k % ) cout << "First" << endl;
else cout << "Second" << endl;
} return ;
}
A Lot of Games(Trie树 + 博弈)的更多相关文章
- 【10.4校内测试】【轮廓线DP】【中国剩余定理】【Trie树+博弈】
考场上几乎是一看就看出来轮廓线叻...可是调了两个小时打死也过不了手出样例!std发下来一对,特判对的啊,转移对的啊,$dp$数组竟然没有取max!!! 某位考生当场死亡. 结果下午又请了诸位dala ...
- Codeforces 455B A Lot of Games(字典树+博弈)
题目连接: Codeforces 455B A Lot of Games 题目大意:给定n.表示字符串集合. 给定k,表示进行了k次游戏,然后是n个字符串.每局開始.字符串为空串,然后两人轮流在末尾追 ...
- CF456D A Lot of Games (字典树+DP)
D - A Lot of Games CF#260 Div2 D题 CF#260 Div1 B题 Codeforces Round #260 CF455B D. A Lot of Games time ...
- 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找
千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
- 基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
- hihocoder-1014 Trie树
hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...
- 洛谷P2412 查单词 [trie树 RMQ]
题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...
- 通过trie树实现单词自动补全
/** * 实现单词补全功能 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #incl ...
随机推荐
- MyBatis 开发手册
这一遍看Mybatis的原因是怀念一下去年的 10月24号我写自己第一个项目时使用全配置文件版本的MyBatis,那时我们三个人刚刚大二,说实话,当时还是觉得MyBatis挺难玩的,但是今年再看最新版 ...
- WPF实现放大镜
这是一个之前遗留的问题.wpf里面有很多很多的东西,我以前用的真的只是其中很小的一个角落都不到. 需求背景:图片来源于相机拍摄,由于对像素要求,拍出来的图像素比较高,原图尺寸为30722048,以目前 ...
- java集合第一节,List简单介绍
Java中List集合的常用方法 List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来. package 集合; import java.ut ...
- Vue优化:常见会导致内存泄漏问题及优化
1. 监听在window/body等事件没有解绑2. 绑在EventBus的事件没有解绑3. 模块形成的闭包内部变量使用完后没有置成null4. 使用第三方库创建,没有调用正确的销毁函数5 . ech ...
- fenby C语言 P15
while(条件表达式){循环体} #include <stdio.h> int main(){ int i=1,sum=0; while(i<6) { sum=sum+i*3; i ...
- 从《国产凌凌漆》看到《头号玩家》,你就能全面了解5G
2019 年 9 月,移动.联通.电信5G套餐预约总和已突破 1000 万.2019 年 11 月,三大电信运营商将在全国范围内提供携号转网服务.2019 年内,移动将建立 5 万个 5G 基站,联通 ...
- Node.js 使用 express-jwt 解析 JWT
Node.js 上 Token 鉴权常用的是 passport,它可以自定义校验策略,但如果你是用 express 框架,又只是解析 JWT 这种简单需求,可以尝试下 express-jwt 这个中间 ...
- (大模拟紫题) Luogu P1953 易语言
原题链接:P1953 易语言 (我最近怎么总在做大模拟大搜索题) 分别处理两种情况. 如果只有一个1或0 直接设一个cnt为这个值,每次输入一个新名字之后把数字替换成cnt,最后cnt++即可. 注意 ...
- CSPS_107
和教练谈话.jpg T1 枚举不动位置,枚举字母,可以$O(n^2)$ T2 暴筛 70 但是考虑枚举$m^{\frac{1}{3}}$之内的质数(怎么想到啊) 把它们消去以后,设剩下数x 若x含有平 ...
- CSPS_105
不想多说... T1 是$1$还是$26^n-1$ T2 是$f[getf(u)]=getf(v)$还是$f[u]=v$ T3 是$if(condition1\&\&condition ...