Codeforces Round #260 (Div. 2) D
1 second
256 megabytes
standard input
standard output
Andrew, Fedor and Alex are inventive guys. Now they invent the game with strings for two players.
Given a group of n non-empty strings. During the game two players build the word together, initially the word is empty. The players move in turns. On his step player must add a single letter in the end of the word, the resulting word must be prefix of at least one string from the group. A player loses if he cannot move.
Andrew and Alex decided to play this game k times. The player who is the loser of the i-th game makes the first move in the (i + 1)-th game. Guys decided that the winner of all games is the player who wins the last (k-th) game. Andrew and Alex already started the game. Fedor wants to know who wins the game if both players will play optimally. Help him.
The first line contains two integers, n and k (1 ≤ n ≤ 105; 1 ≤ k ≤ 109).
Each of the next n lines contains a single non-empty string from the given group. The total length of all strings from the group doesn't exceed 105. Each string of the group consists only of lowercase English letters.
If the player who moves first wins, print "First", otherwise print "Second" (without the quotes).
2 3
a
b
First
3 1
a
b
c
First
1 2
ab
Second
题意:给出一些字符串,要求每次两个人轮流取字符放在一个新串的后面,使得新串是已知字符串集合中的前缀,第k次胜利的则最后胜利。 判断胜负情况。
sl :很久就见过这个题目,今天终于算是补上了(又是一道老提) 。 树形dp一下,记录到当前节点的胜负情况。
注意:由于做trie树时设置了一个虚拟节点0 所以递归到叶子节点的时候胜负有所颠倒。
然后得到0节点的胜负情况。如果win[0]=true&&false =true;也就是当前节点可胜可负,完全取决第一个人,所以这种情况第一个人胜利。
然后就是win[0]=true. false[0]=false ; 也就是谁先取谁胜。 这取决游戏的次数。
注意特判1次的情况。剩下的就很简单了。
1 //by caonima
2 //hehe
3 #include <bits/stdc++.h>
4 using namespace std;
5 const int MAX = 1e5+;
6 int win[MAX],lose[MAX],G[MAX][];
7 char str[MAX];
8 int n,k,cur;
9 void insert(char *S) {
int root=;
for(int i=;S[i];i++) {
int x=S[i]-'a';
if(!G[root][x]) {
G[root][x]=++cur;
}
root=G[root][x];
}
}
void dfs(int u) {
int is_left=true,v;
win[u]=lose[u]=false;
for(int i=;i<=;i++) {
if(v=G[u][i]) {
dfs(v); is_left=false;
win[u]|=!win[v];
lose[u]|=!lose[v];
}
}
if(is_left) lose[u]=true;
}
void gao() {
dfs();
// printf("%d %d",win[0],lose[0]);
if(k==) {
win[] ? printf("First\n") : printf("Second\n");
}
else if(win[]&&lose[]) {
printf("First\n");
}
else if(win[]) {
(k&) ? printf("First\n") : printf("Second\n");
}
else {
printf("Second\n");
}
}
int main() {
while(scanf("%d %d",&n,&k)==) {
cur=;
for(int i=;i<=n;i++) {
scanf("%s",str);
insert(str);
}
gao() ;
}
return ;
}
Codeforces Round #260 (Div. 2) D的更多相关文章
- DP Codeforces Round #260 (Div. 1) A. Boredom
题目传送门 /* 题意:选择a[k]然后a[k]-1和a[k]+1的全部删除,得到点数a[k],问最大点数 DP:状态转移方程:dp[i] = max (dp[i-1], dp[i-2] + (ll) ...
- 递推DP Codeforces Round #260 (Div. 1) A. Boredom
题目传送门 /* DP:从1到最大值,dp[i][1/0] 选或不选,递推更新最大值 */ #include <cstdio> #include <algorithm> #in ...
- Codeforces Round #260 (Div. 2)AB
http://codeforces.com/contest/456/problem/A A. Laptops time limit per test 1 second memory limit per ...
- Codeforces Round #260 (Div. 1) D. Serega and Fun 分块
D. Serega and Fun Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/pro ...
- Codeforces Round #260 (Div. 1) C. Civilization 并查集,直径
C. Civilization Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/probl ...
- Codeforces Round #260 (Div. 1) A - Boredom DP
A. Boredom Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/problem/A ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
题目链接:http://codeforces.com/problemset/problem/455/A A. Boredom time limit per test 1 second memory l ...
- Codeforces Round #260 (Div. 2)
A. Laptops 题目意思: 给定n台电脑,第i台电脑的价格是ai ,质量是bi ,问是否存在一台电脑价格比某台电脑价格底,但质量确比某台电脑的质量高,即是否存在ai < aj 且 bi & ...
- Codeforces Round #260 (Div. 2) C
Description Alex doesn't like boredom. That's why whenever he gets bored, he comes up with games. On ...
随机推荐
- JAVA POI的使用
最近开发遇到了要通过Java处理Excel文件的场景,于是乎在网上了解了一番,最后自己做了个demo,已上传gitee:https://gitee.com/github-26930945/JavaCo ...
- CSS之选择符、链接、盒子模型、显示隐藏元素
<html> <head> <meta charset="utf-8"> <title>选择符.链接.盒子模型.显示隐藏元素< ...
- 转 linux shell自定义函数(定义、返回值、变量作用域)介绍
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...
- Apache Calcite项目简介
文章导读: 什么是Calcite? Calcite的主要功能? 如何快速使用Calcite? 什么是Calcite Apache Calcite是一个动态数据管理框架,它具备很多典型数据库管理系统的功 ...
- duilib属性
原文转载自:http://blog.csdn.net/lixiang987654321/article/details/45008441 这里我想讲解一下duilib中的一些属性的理解,当然这是一篇永 ...
- 重新学习Java——对象和类(二)
上一节回归了如何以面向对象的思想去使用一些Java中的公共类,也设计了一些自己的类并介绍了设计类的基本方法和技巧,这一节我们将继续回顾这些内容,并争取从中获得新的体验和感受. 1. 静态域与静态方法 ...
- droid开发:如何打开一个.dcm文件作为位图?
我目前正在做一个Android应用程序的DICOM 继code打开图片DROM RES /绘制的“ussual”图像格式,但它不与.dcm工作 公共类BitmapView扩展视图 { 公共Bitmap ...
- jboss 配置虚拟路径
1.找到jboss服务器下server.xml文件.我用的是web用户,所以在web用户下找 路径:G:\skWorkspace\Jboss\server\web\deploy\jbossweb.sa ...
- 一次“MySQL server has gone away”故障及其解决
1,问题现象 某次测试发现,程序失去响应.由于程序集成了EurekaLog组件,弹出了错误框.查看其给出的Call Stack信息,发现没有发生线程死锁(DeadLock=0;),问题在于 Wait ...
- 用 webpack 实现持久化缓存
什么是持久化缓存? 原文链接https://sebastianblade.com/using-webpack-to-achieve-long-term-cache/ 缓存(cache)一直是前端性能优 ...