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 ...
随机推荐
- 概念理解:boost::asio::io_service
IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...
- 我要学并发-Java内存模型到底是什么
内存模型 在计算机CPU,内存,IO三者之间速度差异,为了提高系统性能,对这三者速度进行平衡. CPU 增加了缓存,以均衡与内存的速度差异: 操作系统增加了进程.线程,以分时复用 CPU,进而均衡 C ...
- 扩展阿里p3c实现自定义代码规范检查
前段时间fastjson报出了漏洞,只要打开setAutoType特性就会存在风险,自己测试环境的一个项目被揪出来了-_-!.虽然改动很小,但就是觉得憋屈.fastjson还是挺好的,想着禁用的话太 ...
- Linux与Git学习笔记
Linux基础概念篇: 终端.控制器 命令行界面 (CLI).终端 (Terminal).Shell.TTY的区别 Linux下的yum与apt-get Linux中su.su -和sudo的区别 L ...
- linux-查看服务器内存使用情况(free top)
free命令:显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存. [root@ipha-dev71- workspace]# free # kb total used ...
- Rsync服务常见问题
转---Rsync 故障排查整理 Rsync服务常见问题汇总讲解: 1. 客户端的错误现象:No route to host rsync服务端开启的iptables**防火墙** [root@nfs0 ...
- 记因git规范导致的提测和发布延迟
号外 最近因为换工作的原因,我的博客和Github没有像之前那样频繁的更新了.一方面原因是投递简历和准备面试,由于之前的基础没有很扎实,需要把平时的知识点都整理一遍.这个时间段持续了20多天的样子,因 ...
- xshell rz commend not found
sudo apt-get install lrzsz 上传rz 下载sz
- SpringCloud - 概述
Spring Cloud 什么是Spring Cloud ? SpringCloud是基于SpringBoot提供的一套一站式微服务解决方案,包括服务注册与发现(Eureka), 配置中心(Sprin ...
- IDEA配置tomcat报错
昨晚想Eclipse转IDEA,谁知道在tomcat就卡住了,难受.今天一下就解决了,记录一下(没有保存错误信息的截图[/敲打]). 问题描述: 运行的时候tomcat卡在Deployment of ...