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 ...
随机推荐
- 2018上C语言程序设计(高级)- 第0次作业成绩
作业链接: https://edu.cnblogs.com/campus/hljkj/CS201702/homework/1617 评分规则 本次作业作为本学期的第一次作业,大家态度较诚恳,篇幅都比较 ...
- Software Engineering-HW1
title: Software Engineering-HW1 date: 2017-09-13 15:41:13 tags: HW --- 阅读随笔 在<徐宥:掉进读书的兔子洞>里面, ...
- Beta版本敏捷冲刺每日报告——Day3
1.情况简述 Beta阶段第三次Scrum Meeting 敏捷开发起止时间 2017.11.4 08:00 -- 2017.11.4 22:00 讨论时间地点 2017.11.4晚9:00,软工所实 ...
- router问题
var http = require("http"); var router = require("./router.js"); //创建服务器 var ser ...
- Argparse简易教程
Argparse简易教程 原文:Argparse Tutorial 译者:likebeta 本教程是对于Python标准库中推荐使用的命令行解析模块argparse的简单介绍. PS:还有其他两个模块 ...
- win7下,使用django运行django-admin.py无法创建网站
安装django的步骤: 1.安装python,选择默认安装在c盘即可.设置环境变量path,值添加python的安装路径. 2.下载ez_setup.py,下载地址:http://peak.tele ...
- OpenShift实战(一):OpenShift高级安装
1.1 服务器基本信息 本次安装采用一个master.5个node.3个etcd,node节点两块硬盘,60G磁盘用于docker storage,xxx改为自己的域名或主机名. 节点 功能 IP 内 ...
- 一种dubbo逻辑路由方案
背景介绍 现在很多的公司都在用dubbo.springcloud做为服务化/微服务的开发框架,服务化之后应用越来越多,链路越来越长,服务环境的治理变的很困难.比如:研发团队的人很多的,同时有几个分支在 ...
- 关于tr069网管开发系列教程
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- SpringBoot(三):springboot启动参数
springboot默认启动入口函数是支持接收参数,并且在整个应用程序内部也可以获取到这些参数,并且如果传递的参数是一些内部定义的参数将会被映射到springboot内部配置项,从而达到配置效果. s ...