【问题描述】

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 的惩罚的更多相关文章

  1. HY 的惩罚 (Trie 树,博弈论)

    [问题描述] hy 抄题解又被老师抓住了,现在老师把他叫到了办公室. 老师要 hy 和他玩一个游 戏.如果 hy 输了,老师就要把他开除信息组; 游戏分为 k 轮.在游戏开始之前,老师会将 n 个由英 ...

  2. 惩罚因子(penalty term)与损失函数(loss function)

    penalty term 和 loss function 看起来很相似,但其实二者完全不同. 惩罚因子: penalty term的作用是把受限优化问题转化为非受限优化问题. 比如我们要优化: min ...

  3. 浅谈RAID写惩罚(Write Penalty)与IOPS计算

    介绍 通常在讨论不同RAID保护类型的性能的时候,结论都会是RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RA ...

  4. HY.Mail:C#简单、易用的邮件工具库

    一.开发HY.Mail的初衷 Nuget或者github上有很多成熟且优秀的邮件库可以使用, 但是目前找到的使用都不够简洁或者不适合我的使用场景 我的场景是开发应用场景(例如系统通知.运维通知),而非 ...

  5. 【转载】RAID写惩罚(Write Penalty)与IOPS计算

    浅谈RAID写惩罚(Write Penalty)与IOPS计算 Character is what you are in the dark. 暗处最能反映一个人真正品格. ---------Apri ...

  6. hy这个破项目

    最近部署hy记事 这段时间摊上了个挺恶心的项目,叫什么hy鞋同平台..前后左右整的人挺难受的.学到的东西特别少,而且比较浪费时间.不过,还是总结一下吧,好歹花了这么久的时间了 Doc管理xi tong ...

  7. Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子

    转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...

  8. python + lisp hy的新手注记2 eval, HyModel and python AST

    来自我在Stack Overflow上的提问,https://stackoverflow.com/questions/51675355/how-to-eval-a-cond-case-and-retu ...

  9. python + lisp hy的新手注记1

    想在python里用lisp方言hy的目的: 1 用lisp去parse 包含 “数据+简单if控制流(代码.AST)”的配置文件,或者说用包含s-exp的.hy文件作为这类配置文件的实现(而不是用y ...

随机推荐

  1. DEVC使用问题集锦

    一.DEVC++编译出现"Id return 1 exit status" 这是初学者刚用DEVC经常碰到问题,一般有如下解决方法: 1.首先检查下是否有c的exe程序开着,若开着 ...

  2. intellij idea 找不到或无法加载主类

    解决intellij idea 找不到或无法加载主类,请看以下图文介绍 然后idea会重启,等idea启动后 右侧的maven clean 一下,然后再compile就解决了

  3. javascript改变style样式和css样式

    转载 在很多情况下,都需要对网页上元素的样式进行动态的修改.在JavaScript中提供几种方式动态的修改样式,下面将介绍方法的使用.效果.以及缺陷. 1.使用obj.className来修改样式表的 ...

  4. NHibernate从入门到精通系列(2)——NHibernate环境与结构体系

    内容摘要 NHibernate的开发环境 NHibernate的结构体系 NHibernate的配置 一.NHibernate的开发环境 NHibernate的英文官方网站为:http://nhfor ...

  5. CentOS 6.5 Tomcat安装及配置

    1.安装jdk,配置jdk环境(此步骤略过) 2.下载安装tomcat 百度网盘链接: https://pan.baidu.com/s/1Ieejo7TQyzRAVPhQft8Phw 密码: dg2v ...

  6. JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换

    首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...

  7. lambda匿名函数透析

    lambda匿名函数透析 目录 1       匿名函数的作用... 1 2       匿名函数的格式... 1 3       匿名函数实例代码... 3   1         匿名函数的作用 ...

  8. Java课后练习

    1.利用循环输出:************************* public class Shape { public static void main(String[] args) { for ...

  9. Oracle处理XML字段时遇到的ORA-31013: XPATH 表达式无效问题

    select extractValue(ed.info_id, '/Root/ExpandProfile/PhoneNumber') as phone, extractValue(ed.info_id ...

  10. 使用交互式方式在SQL server2017上创建数据库

    软件基础:在电脑上提前安装好SQL server2017,并且安装好其中的SSMS(SQL server Management Studio) 创建方式:交互式 操作内容:创建学生课程数据库系统 步骤 ...