【问题描述】
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://*.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 ...
随机推荐
-
Entity Framework Code First for SQL Compact
这篇博客将介绍EF Code First中如何使用SQL Compact.SQL Compact是微软推出的免费的关系型数据库,目前最新版本是SQL Compact 4.0.微软的开发工具VS 201 ...
-
msp时钟设置程序
吐槽一下MSP430需要明白的东西: 在430中,一个时钟周期 = MCLK晶振的倒数.如果MCLK是8M,则一个时钟周期为1/8us: 一个机器周期 = 一个时钟周期,即430每个动作都能完成一个基 ...
-
SGU 194 Reactor Cooling Dinic求解 无源无汇有上下界的可行流
题目链接 题意:有向图中有n(1 <= n <= 200)个点,无自环或者环的节点个数至少为3.给定每条边的最小流量和最大流量,问每条边的可行流量为多少? 思路:一般求解的网络流并不考虑下 ...
-
C++Primer第5版学习笔记(三)
C++Primer第5版学习笔记(三) 第四/五章的重难点内容 你可以点击这里回顾第三章内容 因为第五章的内容比较少,因此和第四章的笔记内容合并. 第四章是 ...
-
docker制作node程序镜像:
准备: 需要5个文件 新建一个docker文件夹 1 .ignore git忽略文件用的 2 pakage.json 安装NODE程序的 也可以直接拷贝进 docker文件加 3 node环境 lin ...
-
Python--可迭代对象,迭代器,生成器
记得在刚开始学Python的时候,看到可迭代对象(iterable).迭代器(iterator)和生成器(generator)这三个名词时,完全懵逼了,根本就不知道是啥意识.现在以自己的理解来详解下这 ...
-
100-days: twenty
Title: Apple's 'show time(好戏开幕)' event(发布会) puts the spotlight on subscription services Apple's 'sho ...
-
关于C/s结构 本地目录的思考
对于一般客户而言,程序使用时,查看本地目录下的对应内容. 如果有则正常使用.实际上相当于缓存,加快程序执行速度. 如果缓存里没有东西,比如被删除了,那么就在数据库中查找.然后生成缓存. 这样的好处,是 ...
-
asp.net MVC中防止跨站请求攻击(CSRF)的ajax用法
参考: Preventing Cross-Site Request Forgery (CSRF) AttacksValidating .NET MVC 4 anti forgery tokens in ...
-
最大似然估计和最大后验概率MAP
最大似然估计是一种奇妙的东西,我觉得发明这种估计的人特别才华.如果是我,觉得很难凭空想到这样做. 极大似然估计和贝叶斯估计分别代表了频率派和贝叶斯派的观点.频率派认为,参数是客观存在的,只是未知而矣. ...