hy 的惩罚
【问题描述】
hy 抄题解又被老师抓住了,现在老师把他叫到了办公室。 老师要 hy 和他 玩一个游戏。如果 hy 输了,老师就要把他开除信息组; 游戏分为 k 轮。在游戏开始之前,老师会将 n 个由英文字母组成的字符串放 入箱子。
每局开始,字符串为空串,然后两人轮流在末尾追加字符,保证新的字 符串为箱子中某字符串的前缀,直到有一个人不能操作,不能操作的那个人就输 掉当前的一轮。新一轮由上一句输的人先手。最后一局赢的人获胜。
假定老师和 hy 都能采取最优的策略,且老师为了彰显自己的大度让 hy 先手, 求 hy 能否获胜。
【输入格式】 输入包括多组数据,输入以文字流结尾(EOF)为结束。 每组数据的第一行包含两个整数 n, k,分别表示放入箱子字符串的数量和游 戏的轮数。 接下来 n 行,每行一个字符串表示由英文字母组成的句子。
【输出格式】 每组数据第一行,输出 hy 是否能赢,若能赢输出”HY wins!“,否则输出” Teacher wins!”。
【样例输入 1】 2 3
a b
3 1
a b c
【样例输出 1】 HY wins!
HY wins!
【样例输入 2】 1 2
ab
【样例输出 2】 Teacher wins!
全国信息学奥林匹克联赛(NOIP2017)模拟赛 提高组
【评测用例规模与约定】 对于 40%的评测用例,1≤n≤10,1≤k≤10 4; 对于 100%的评测用例,1≤n≤10 5,1≤k≤10 9,保证所有字符串总长度不超过 10 5, 数据组数不超过 10
题解:
博弈论+递推+字典树


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int num,ch[][],n,k;
bool f[][],p,p2;
char s[];
void build()
{int len,x,i;
len=strlen(s);
x=;
for (i=;i<len;i++)
if (ch[x][s[i]-'a']==)
{
num++;
ch[x][s[i]-'a']=num;
x=num;
}
else x=ch[x][s[i]-'a'];
}
bool dfs(int x,bool y,bool z)
{int i,k1=,k2=;
for (i=;i<;i++)
if (ch[x][i])
{
if (x)
dfs(ch[x][i],!y,z);
else dfs(ch[x][i],y,z);
}
for (i=;i<;i++)
if (ch[x][i])
{
if (x==)
{
if (f[ch[x][i]][y])
k1++;
else k2++;
}
if (x!=)
{
if (f[ch[x][i]][!y])
k1++;
else k2++;
}
}
if (x==&&y==&&k1!=)
{
if (k2==) p=;
else p=;
}
if (x==&&y==)
{
if (k1!=) return ;
else return ;
}
if (x==&&y==)
{
if (k2!=) return ;
else return ;
}
if (k1==&&k2==)
{
if (y==) p=;
f[x][y]=y;
return y;
}
if (y==&&k2!=)
{
f[x][y]=;
return ;
}
if (y==&&k1==)
{
f[x][y]=;
return ;
}
if (y==&&k2==)
{
f[x][y]=;
return ;
}
if (y==&&k1!=)
{
if (k2!=) p=;
f[x][y]=;
return ;
}
}
int main()
{int i,j;
bool b1,b2;
freopen("amerce.in","r",stdin);
freopen("amerce.out","w",stdout);
while (cin>>n>>k)
{
memset(ch,,sizeof(ch));
num=;
memset(f,,sizeof(f));
p=;
for (i=;i<=n;i++)
{
scanf("%s",s);
build();
}
b1=dfs(,,);//先手
b2=dfs(,,);//后手
//cout<<b1<<' '<<b2<<endl;
if (b1&&b2) printf("HY wins!\n");
if (b1&&!b2)
{
if (k%==)
{
if (p==)
printf("Teacher wins!\n");
else printf("HY wins!\n");
}
if (k%==) printf("HY wins!\n");
}
if (!b1&&b2)
{
printf("Teacher wins!\n");
}
if (!b1&&!b2) printf("Teacher wins!\n");
}
}
hy 的惩罚的更多相关文章
- HY 的惩罚 (Trie 树,博弈论)
[问题描述] hy 抄题解又被老师抓住了,现在老师把他叫到了办公室. 老师要 hy 和他玩一个游 戏.如果 hy 输了,老师就要把他开除信息组; 游戏分为 k 轮.在游戏开始之前,老师会将 n 个由英 ...
- 惩罚因子(penalty term)与损失函数(loss function)
penalty term 和 loss function 看起来很相似,但其实二者完全不同. 惩罚因子: penalty term的作用是把受限优化问题转化为非受限优化问题. 比如我们要优化: min ...
- 浅谈RAID写惩罚(Write Penalty)与IOPS计算
介绍 通常在讨论不同RAID保护类型的性能的时候,结论都会是RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RA ...
- HY.Mail:C#简单、易用的邮件工具库
一.开发HY.Mail的初衷 Nuget或者github上有很多成熟且优秀的邮件库可以使用, 但是目前找到的使用都不够简洁或者不适合我的使用场景 我的场景是开发应用场景(例如系统通知.运维通知),而非 ...
- 【转载】RAID写惩罚(Write Penalty)与IOPS计算
浅谈RAID写惩罚(Write Penalty)与IOPS计算 Character is what you are in the dark. 暗处最能反映一个人真正品格. ---------Apri ...
- hy这个破项目
最近部署hy记事 这段时间摊上了个挺恶心的项目,叫什么hy鞋同平台..前后左右整的人挺难受的.学到的东西特别少,而且比较浪费时间.不过,还是总结一下吧,好歹花了这么久的时间了 Doc管理xi tong ...
- Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子
转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...
- python + lisp hy的新手注记2 eval, HyModel and python AST
来自我在Stack Overflow上的提问,https://stackoverflow.com/questions/51675355/how-to-eval-a-cond-case-and-retu ...
- python + lisp hy的新手注记1
想在python里用lisp方言hy的目的: 1 用lisp去parse 包含 “数据+简单if控制流(代码.AST)”的配置文件,或者说用包含s-exp的.hy文件作为这类配置文件的实现(而不是用y ...
随机推荐
- 第十四,十五周PTA作业
1.第十四周part1 7-3 #include<stdio.h> int main() { int n; scanf("%d",&n); int a[n]; ...
- Beta 第五天
今天遇到的困难: 前端大部分代码由我们放逐的组员完成,这影响到了我们解决"Fragment碎片刷新时总产生的固定位置"的进程,很难找到源码对应 新加入的成员对界面代码不熟悉. 我们 ...
- 敏捷冲刺每日报告——Day2
1.情况简述 Alpha阶段第一次Scrum Meeting 敏捷开发起止时间 2017.10.26 00:00 -- 2017.10.27 00:00 讨论时间地点 2017.10.26晚9:30, ...
- 每日冲刺报告——Day4(Java-Team)
第四天报告(11.5 周日) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://git ...
- servlet线程同步问题-代码实现同步(转)
从servlet的生命周期中,我们知道,当第一次访问某个servlet后,该servlet的实例就会常驻 内存,以后再次访问该servlet就会访问同一个servlet实例,这样就带来多个用户去访问一 ...
- 服务器数据恢复_Linux网站服务器故障数据恢复案例
[数据恢复故障描述] 一台linux网站服务器,DELL R200,管理约50个左右网站,使用一块SATA 160GB硬盘.正常使用中突然宕机,尝试再次启动失败,将硬盘拆下检测时发现存在约100个坏扇 ...
- nyoj 概率计算
概率计算 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 A和B两个人参加一场答题比赛.比赛的过程大概是A和B两个人轮流答题,A先答.一旦某人没有正确回答问题,则对手 ...
- js 时间戳 vue 时间戳的转换 ?
在没有用vue做项目之前 也遇到过戳转换的问题 直接函数 调用 方法 这个也可以写成vue的 把function去掉 formatDate后面加冒号 就可以了 当然这个不是原创 但是是谁的我忘记了 ...
- EasyUI DataGrid 实现单行/多行编辑功能
要实现 EasyUI DataGrid 的可编辑很简单,在需要编辑的列添加 editor [编辑器]就可以了. 单行编辑 // 初始化数据列表 function initDatagrid() { $( ...
- Ansible自动化运维工具-上
[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...