题目链接: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树 + 博弈)的更多相关文章

  1. 【10.4校内测试】【轮廓线DP】【中国剩余定理】【Trie树+博弈】

    考场上几乎是一看就看出来轮廓线叻...可是调了两个小时打死也过不了手出样例!std发下来一对,特判对的啊,转移对的啊,$dp$数组竟然没有取max!!! 某位考生当场死亡. 结果下午又请了诸位dala ...

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

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

  3. 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 ...

  4. 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找

    千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...

  5. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  6. 基于trie树的具有联想功能的文本编辑器

    之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...

  7. hihocoder-1014 Trie树

    hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...

  8. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  9. 通过trie树实现单词自动补全

    /** * 实现单词补全功能 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #incl ...

随机推荐

  1. MyBatis 开发手册

    这一遍看Mybatis的原因是怀念一下去年的 10月24号我写自己第一个项目时使用全配置文件版本的MyBatis,那时我们三个人刚刚大二,说实话,当时还是觉得MyBatis挺难玩的,但是今年再看最新版 ...

  2. WPF实现放大镜

    这是一个之前遗留的问题.wpf里面有很多很多的东西,我以前用的真的只是其中很小的一个角落都不到. 需求背景:图片来源于相机拍摄,由于对像素要求,拍出来的图像素比较高,原图尺寸为30722048,以目前 ...

  3. java集合第一节,List简单介绍

    Java中List集合的常用方法   List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来. package 集合; import java.ut ...

  4. Vue优化:常见会导致内存泄漏问题及优化

    1. 监听在window/body等事件没有解绑2. 绑在EventBus的事件没有解绑3. 模块形成的闭包内部变量使用完后没有置成null4. 使用第三方库创建,没有调用正确的销毁函数5 . ech ...

  5. fenby C语言 P15

    while(条件表达式){循环体} #include <stdio.h> int main(){ int i=1,sum=0; while(i<6) { sum=sum+i*3; i ...

  6. 从《国产凌凌漆》看到《头号玩家》,你就能全面了解5G

    2019 年 9 月,移动.联通.电信5G套餐预约总和已突破 1000 万.2019 年 11 月,三大电信运营商将在全国范围内提供携号转网服务.2019 年内,移动将建立 5 万个 5G 基站,联通 ...

  7. Node.js 使用 express-jwt 解析 JWT

    Node.js 上 Token 鉴权常用的是 passport,它可以自定义校验策略,但如果你是用 express 框架,又只是解析 JWT 这种简单需求,可以尝试下 express-jwt 这个中间 ...

  8. (大模拟紫题) Luogu P1953 易语言

    原题链接:P1953 易语言 (我最近怎么总在做大模拟大搜索题) 分别处理两种情况. 如果只有一个1或0 直接设一个cnt为这个值,每次输入一个新名字之后把数字替换成cnt,最后cnt++即可. 注意 ...

  9. CSPS_107

    和教练谈话.jpg T1 枚举不动位置,枚举字母,可以$O(n^2)$ T2 暴筛 70 但是考虑枚举$m^{\frac{1}{3}}$之内的质数(怎么想到啊) 把它们消去以后,设剩下数x 若x含有平 ...

  10. CSPS_105

    不想多说... T1 是$1$还是$26^n-1$ T2 是$f[getf(u)]=getf(v)$还是$f[u]=v$ T3 是$if(condition1\&\&condition ...