B. A Lot of Games
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

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.

Input

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.

Output

If the player who moves first wins, print "First", otherwise print "Second" (without the quotes).

Examples
input
2 3
a
b
output
First
input
3 1
a
b
c
output
First
input
1 2
ab
output
Second

题意:有n(n<=100000)个单词,两个人比赛,规则为:最开始字符串为空,两人轮流每次填一个字母,使该字符串为这n个单词其中一个的前缀,当一个人不能再填入字母时,他就输了,比赛进行k次,第k次比赛胜者为最终胜者。
思路:最开始毫无思路,跟着别人的题解走了一遍。将所有单词构建一颗字典树,再进行博弈。第一道博弈和字典树。1表示先手败,2表示先手胜,3表示能胜能负。先手必败则,先手一直先手,最后一局后手胜;先手胜则下一局成后手,即为胜败交替,此时,最后一句的胜败决定于k的奇偶性;能胜能败,则先手前k-1局败,最后一句先手且胜。简单博弈。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<malloc.h>
using namespace std;
#define maxn 100005 char s[maxn];
//int next[maxn][30],root,top; struct Trie
{
Trie *next[];
}; Trie* createtrie(char *str,Trie* root) //创建字典树
{
int len=strlen(str);
Trie *p=root,*q;
for(int i=; i<len; i++)
{
int id=str[i]-'a';
if(p->next[id]==NULL)
{
q=(Trie *)malloc(sizeof(Trie));
//q->v=1;
for(int j=; j<; j++)
q->next[j]=NULL;
p->next[id]=q;
p=p->next[id];
}
else
{
//p->next[id]->v++;
p=p->next[id];
}
}
//p->v=-1;
return root;
} int solve(Trie *root) //博弈
{
int ok=,ans=;
for(int i=; i<; i++)
{
if(root->next[i]!=NULL)
{
ok=;
ans|=solve(root->next[i])^;
}
}
if(!ok)
ans=;
return ans;
} int main()
{
int n,k;
//top=root=1;
Trie* root;
scanf("%d%d",&n,&k);
root=(Trie*)malloc(sizeof(Trie));
for(int j=; j<; j++)
root->next[j]=NULL;
for(int i=; i<n; i++)
{
scanf("%s",s); root=createtrie(s,root);
}
//output(root);
int tmp=solve(root);
//cout<<tmp<<endl;
if(tmp==)
printf("First\n");
else if(k&&&tmp==)
printf("First\n");
else
printf("Second\n" );
return ;
}

codeforces_455B的更多相关文章

随机推荐

  1. 12、Cocos2dx 3.0游戏开发找小三之3.0中的生命周期分析

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706303 生命周期分析 在前面文章中我们执行了第 ...

  2. Unity 5.x 导入教学Demo

    前言 小巫也来玩Unity3D了.以后会把学习的一些过程博客记录下来,方大家也方便自己学习和查看.本篇博客介绍怎样在Unityclient中导入Assert Store中下载的项目资源,方便我们进一步 ...

  3. mac终端配置Android ADB命令

    不得不说mac是一款开发利器,不仅可以开发ios,而且对于Android开发也是不错的选择,下面我就对mac配置adb命令,进行简要的说明.下面我将一下mac环境下的配置步骤:1.在自己的目录(hom ...

  4. [翻译角]Learn From George, Not Pinocchio(ESLPOD)

    以下转自www.eslpod.com,翻译为本人添加.其余版权均归原网站所有. ESLPOD是一个英语学习网站,我最初知道这个网站,是因为“奶爸”<把你的英语用起来>一书的推荐. ESLP ...

  5. http trigger 事件源是事件的生产者,函数是事件的处理者

    以函数计算作为 API 网关后端服务_用户指南(开放 API)_API 网关-阿里云  https://help.aliyun.com/document_detail/54788.html 创建触发器 ...

  6. 恶意IP监控

    http://www.icarei.cn/fastdatav/MyDebug/readlog/error/ip191.96.249.136

  7. POJ1912 A highway and the seven dwarfs (判断凸包与直线相交 logn)

    POJ1912 给定n个点 和若干条直线,判断对于一条直线,是否存在两个点在直线的两侧. 显然原命题等价于 凸包与直线是否相交. O(n)的算法是显而易见的 但是直线数量太多 就会复杂到O(n^2)由 ...

  8. navicat导入.sql文件出错2006-MySQLserver has gone away

    方式一(验证无误): 找到mysql安装目录下的my.ini配置文件,加入以下代码: max_allowed_packet=500M wait_timeout=288000 interactive_t ...

  9. Java 中extends与implements使用方法 (转载)

    转自:http://blog.csdn.net/chen_chun_guang/article/details/6323201 初学Java语言, 代码中的extends和implements让我感到 ...

  10. SQL Server触发器创建、删除、修改、查看示例步骤

    一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...