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

题解:

博弈论+递推+字典树

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 using namespace std;
  6 int num,ch[100001][28],n,k;
  7 bool f[100001][3],p,p2;
  8 char s[200001];
  9 void build()
 10 {int len,x,i;
 11     len=strlen(s);
 12     x=0;
 13     for (i=0;i<len;i++)
 14     if (ch[x][s[i]-‘a‘]==0)
 15     {
 16         num++;
 17         ch[x][s[i]-‘a‘]=num;
 18         x=num;
 19     }
 20     else x=ch[x][s[i]-‘a‘];
 21 }
 22 bool dfs(int x,bool y,bool z)
 23 {int i,k1=0,k2=0;
 24     for (i=0;i<26;i++)
 25     if (ch[x][i])
 26     {
 27         if (x)
 28         dfs(ch[x][i],!y,z);
 29         else dfs(ch[x][i],y,z);
 30     }
 31     for (i=0;i<26;i++)
 32     if (ch[x][i])
 33     {
 34         if (x==0)
 35         {
 36         if (f[ch[x][i]][y])
 37          k1++;
 38         else k2++;
 39         }
 40         if (x!=0)
 41         {
 42         if (f[ch[x][i]][!y])
 43          k1++;
 44         else k2++;
 45         }
 46     }
 47     if (x==0&&y==1&&k1!=0)
 48     {
 49         if (k2==0) p=0;
 50         else p=1;
 51     }
 52     if (x==0&&y==1)
 53     {
 54         if (k1!=0) return 1;
 55         else return 0;
 56     }
 57     if (x==0&&y==0)
 58     {
 59         if (k2!=0) return 0;
 60         else return 1;
 61     }
 62     if (k1==0&&k2==0)
 63     {
 64         if (y==1) p=1;
 65         f[x][y]=y;
 66         return y;
 67     }
 68     if (y==1&&k2!=0)
 69     {
 70         f[x][y]=0;
 71         return 0;
 72     }
 73     if (y==0&&k1==0)
 74     {
 75         f[x][y]=0;
 76         return 0;
 77     }
 78     if (y==1&&k2==0)
 79     {
 80         f[x][y]=1;
 81         return 1;
 82     }
 83     if (y==0&&k1!=0)
 84     {
 85         if (k2!=0) p=1;
 86         f[x][y]=1;
 87         return 1;
 88     }
 89 }
 90 int main()
 91 {int i,j;
 92 bool b1,b2;
 93 freopen("amerce.in","r",stdin);
 94 freopen("amerce.out","w",stdout);
 95     while (cin>>n>>k)
 96     {
 97         memset(ch,0,sizeof(ch));
 98         num=0;
 99         memset(f,0,sizeof(f));
100         p=0;
101         for (i=1;i<=n;i++)
102         {
103             scanf("%s",s);
104             build();
105         }
106         b1=dfs(0,1,1);//先手
107         b2=dfs(0,0,0);//后手
108         //cout<<b1<<‘ ‘<<b2<<endl;
109       if (b1&&b2) printf("HY wins!\n");
110       if (b1&&!b2)
111       {
112           if (k%2==0)
113           {
114               if (p==0)
115            printf("Teacher wins!\n");
116            else printf("HY wins!\n");
117           }
118            if (k%2==1) printf("HY wins!\n");
119       }
120       if (!b1&&b2)
121       {
122            printf("Teacher wins!\n");
123       }
124       if (!b1&&!b2) printf("Teacher wins!\n");
125     }
126 }
时间: 2024-08-09 03:55:22

hy 的惩罚的相关文章

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

转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及修饰该target的opinion短语,在opinion mining里面属于很重要的task,很多DM.NLP相关的paper在做这方面的工作.基本的思路是: (1)从sentence的parse tree(比如stanford parser)中选取候选target结点和候选opinion结点,然

谈浅百度惩罚网站的原因与解决方法

原因1)新站百度"审核期"内遭到多次大幅度修改! 一般刚刚上线的新站基本上是没有什么权重的,而在这个时期内我们站长一定要保证网站的"稳定",不能让网站出现任何问题,如查人在短期内多次修改网站的话,百度就一定会对你的网站作出些惩罚,一般表现为降权,或是不更新也不收录,要是严重点还有可能会被百度拉进沙盒! 解决方法如果网站被百度惩罚的原因是近期内多次修改网站,那么唯一的解决方法继续正常更新网站,或后保证它的稳定,不要在对网站修修改改的,只要你保证网站"稳定&q

百度加大力度惩罚新闻站点作弊你受伤了吗

对于站长朋友们来说一直都在关注百度搜索引擎,自6月26日百度站长平台发布了<百度加大清理新闻源力度>,仅仅两个星期百度站长平台再次发布<百度加大力度惩罚新闻站点作弊>. 根据百度站长平台的消息称,在近期对新闻源进行清理的过程中,我们发现大量新闻站点(不仅限于新闻源站点)除了发布新闻软文外,更有甚者采用欺骗搜索引擎的方式制作低质垃圾网页骗取流量. 搜索引擎也非常注意用户体验,想把最好的.对用户最有用的内容呈现给大家.然而因为大量的新闻源站长作弊干扰网页搜索结果,伤害搜索用户体验.而百

更改标题关键词会被惩罚吗?

本节讲一个很常见的问题,很多人会问:如果网站突然想更改几个关键词,会被搜索引擎惩罚吗? 只要不是经常更改关键词,而是偶尔改一次,那搜索引擎可能没有一点反应,一切正常.但更改关键词也有可能引起短时间内快照不更新,甚至蜘蛛突然来得少,从而使网站排名波动.这里讲得关键词主要不是在关键词标签中,而是在title标签中,即更改标题关键词,这个位置比较敏感.所以,以前排名很好的关键词被更改以后,短期内排名可能会波动或者出现其他异常情况. 这些都不要紧,千万不要害怕,如果有些关键词非改不可,那就得改,短期内可

NYIST 1108 最低的惩罚

最低的惩罚 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 那么现在问题就来了... 给你N(1=<N<=15)个任务,每个任务有一个截止完成时间t(1=<t<=10^8)和完成该任务需要的天数v(1=<v<=10^8),任务每超时一天惩罚加1,问最少能获得多少惩罚? 输入 第一行一个数T,表示测试数据组数(T<2000);对于每组测试数据,第一行一个数N,表示任务个数:紧接着N行,每行两个数t和v,如上所述. 输出 对于每组测试数据

心情记(惩罚)

小颖今天很不开心,啊啊啊······ 小颖昨天把公司测试机房的钥匙装到衣服兜兜里面了,早上上班的时候换了件衣服,然后······,早上同事问我要机房钥匙时我一脸懵逼,回想起昨天测试完后的场景,貌似自己把钥匙装到衣服兜兜了,然而我早上还突发奇想的换了件衣服,对我也是醉了,然后叫了快车回住的地方去拿钥匙,今天早上这一来回加上早上上班的快车费,小颖觉得自己今天可以不用吃饭了,呜呜呜······ 为了惩罚自己粗心,今天晚上不许吃饭,更不许吃猪蹄,以后一定要长记性!

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

介绍 ? ? ???? 通常在讨论不同RAID保护类型的性能的时候,结论都会是RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RAID10是提供最好的性能和数据保护,不过成本最高等等.其实决定这些性能考虑的因素很简单,它就是RAID Write Penalty(写惩罚).本文从原理上解释了不同RAID保护级别的写惩罚,以及通过写惩罚计算可用IOPS的方法. 更多信息 ? ? RAID-5?Write Pena

Android消息处理惩罚机制(Handler、Looper、MessageQueue与Message)

Android是消息驱动的,实现消息驱动有几个要素: (1)消息的默示:Message (2)消息队列:MessageQueue (3)消息轮回,用于轮回取出消息进行处理惩罚:Looper (4)消息处理惩罚,消息轮回从消息队列中取出消息后要对消息进行处理惩罚:Handler 日常平凡我们最常应用的就是Message与Handler了,若是应用过HandlerThread或者本身实现类似HandlerThread的器材可能还会接触到Looper,而MessageQueue是Looper内部应用的

看父母能否使用得当惩罚

眼下,随着家庭教育知识的日益普及,“重教轻罚”已成广大家长的共识.在人们的潜意识中,惩罚是打骂的代名词,因而常常在报刊上见到少数家长对孩子罚站.罚跪.罚饿甚至虐待孩子致死的报道,这些家长便是对惩罚缺乏正确的理解和把握. 教育心理学家认为,惩罚的方式多种多样;打骂只是其中的一种,是惩罚的极端性行为.错用.滥用惩罚以致不负责任地对孩子的肉体和心灵施暴,会加重孩子的逆反心理,长此以往就会使惩罚失效,导致最终“管不住孩子”;而适当.适时的科学的惩罚却能对孩子起警戒作用,促使孩子改正错误,从而收到以罚助教