思路:

第一堆:SG = n % 3;

第二堆:无规律,打表即可,用hash比set快很多;

第三堆:SG = n;

第四堆:无规律

第五堆:SG = n % 2;

第六堆:SG = n % (i + 1 ),i表示第i堆;

AC代码:

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <utility>
  6. #include <string>
  7. #include <iostream>
  8. #include <map>
  9. #include <set>
  10. #include <vector>
  11. #include <queue>
  12. #include <stack>
  13. using namespace std;
  14. #define eps 1e-10
  15. #define inf 0x3f3f3f3f
  16. #define PI pair<int, int>
  17. typedef long long LL;
  18. const int maxn = 1e3 + 5;
  19. void in(int &a) {
  20. char ch;
  21. while((ch=getchar()) < '0' || ch >'9');
  22. for(a = 0; ch >= '0' && ch <= '9'; ch = getchar()) {
  23. a = a * 10 + ch - '0';
  24. }
  25. }
  26. int f[100], SG[2][maxn], o[maxn];
  27. void init() {
  28. set<int>s;
  29. f[0] = 1;
  30. f[1] = 2;
  31. SG[0][0] = SG[1][0] = 0;
  32. for(int i = 2; i < 100; ++i) f[i] = f[i-1] + f[i-2];
  33. //斐波那契
  34. for(int i = 1; i <= 1000; ++i) {
  35. s.clear();
  36. for(int j = 0; j < 100; ++j) {
  37. if(f[j] > i) break;
  38. s.insert(SG[0][i-f[j]]);
  39. }
  40. for(int j = 0; j <= 1000; ++j) {
  41. if(!s.count(j)) {
  42. SG[0][i] = j;
  43. break;
  44. }
  45. }
  46. }
  47.  
  48. //偶数
  49. o[0] = 1;
  50. for(int i = 1; i <= 600; ++i) o[i] = i * 2;
  51. for(int i = 1; i <= 1000; ++i) {
  52. s.clear();
  53. for(int j = 0; j < 550; ++j) {
  54. if(o[j] > i) break;
  55. s.insert(SG[1][i-o[j]]);
  56. }
  57. for(int j = 0; j <= 1000; ++j) {
  58. if(!s.count(j)) {
  59. SG[1][i] = j;
  60. break;
  61. }
  62. }
  63. }
  64. }
  65.  
  66. int main() {
  67. init();
  68. int n;
  69. while(scanf("%d", &n) == 1 && n) {
  70. int x, res = 0;
  71. for(int i = 1; i <= n; ++i) {
  72. in(x);
  73. switch(i){
  74. case 1: res ^= x%3; break;
  75. case 2: res ^= SG[0][x]; break;
  76. case 3: res ^= x; break;
  77. case 4: res ^= SG[1][x]; break;
  78. case 5: res ^= x%2; break;
  79. default: res ^= x % (i+1); break;
  80. }
  81. }
  82.  
  83. if(res) printf("Yougth\n");
  84. else printf("Hrdv\n");
  85. }
  86. return 0;
  87. }

如有不当之处欢迎指出!

nyoj913 取石子(十) SG函数 + Nimm博弈的更多相关文章

  1. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 871  Solved: 365[Submit][Status][Discuss] Description ...

  2. BZOJ 1874 取石子游戏 - SG函数

    Description $N$堆石子, $M$种取石子的方式, 最后取石子的人赢, 问先手是否必胜 $A_i <= 1000$,$ B_i <= 10$ Solution 由于数据很小, ...

  3. nyoj135 取石子(二) Nimm博弈

    思路:计算每堆石子的SG值,然后异或得到总的SG值,如果SG=0则输,否则赢. 每堆石子的SG值等于m%(n+1),可以自己推算一下. AC代码 #include <cstdio> #in ...

  4. nyoj585 取石子(六) Nimm博弈

    此题数据十分极限,需要优化,否则会超时.关于此题的不足:明明说的每堆石子数不超过100,我开一个105大小的数组想用哈希居然Runtime Error!! 后来看见有人说需要优化输入: void in ...

  5. bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)

    1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 733  Solved: 451[Submit][Status ...

  6. POJ.1067 取石子游戏 (博弈论 威佐夫博弈)

    POJ.1067 取石子游戏 (博弈论 威佐夫博弈) 题意分析 简单的威佐夫博弈 博弈论快速入门 代码总览 #include <cstdio> #include <cmath> ...

  7. HDU 1848 Fibonacci again and again SG函数做博弈

    传送门 题意: 有三堆石子,双方轮流从某堆石子中去f个石子,直到不能取,问先手是否必胜,其中f为斐波那契数. 思路: 利用SG函数求解即可. /* * @Author: chenkexing * @D ...

  8. HDU-1848-Fibonacci again and again(SG函数,博弈)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意: 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样 ...

  9. 【POJ1067】取石子游戏 (威佐夫博弈)

    [题目] Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的 ...

随机推荐

  1. BSA Network Shell系列-通过NSH执行Powershell,VBScript或bat files脚本

    参考:Running Powershell, VBScript, or bat files via NSH 如果你直接在NSH命令行执行的话,可以参考我翻译的下面的东东,如果想运行NSH 脚本作业的话 ...

  2. Linxu指令--crond

    前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...

  3. linkin大话数据结构--泛型

    泛型(Generic) 什么是泛型? java5开始出现的一种对Java语言类型的一种拓展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数类型时指定的类型占位符,就好比方法的形式参数 ...

  4. JavaScript动画:offset家族和匀速动画详解(含轮播图的实现)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. offset家族简介 我们知道,三大家族包括:offset/scroll ...

  5. awk之FIELDWIDTHS字段宽度

    $ cat file 1234567890 $ awk -vFIELDWIDTHS="1 2 3 4 5" -vOFS="|" 'NF=NF' file 1|2 ...

  6. 浅谈TreeMap以及在java中的使用

    treemap结构是红黑树 1.先介绍一下平衡二叉树 其特点是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.也就是说该二叉树的任何一个子节点,其左右子树的高度 ...

  7. php之冒泡排序

    <?php//冒泡排序function shell_sort($arr){for($i=0;$i<count($arr)-1;$i++){for($j=0; $j< count($a ...

  8. CentsOS7无网情况下安装mysql5.7

    1.需求就不用讲了,客户现场,政府环境,银行环境,大多是没网的,所以无网安装是很有必要的 mysql下载路径:https://dev.mysql.com/downloads/mysql/ 查看自己Li ...

  9. Django的ORM实现数据库事务操作

    在Django中实现数据库的事务操作 在学习MySQL数据库时,MySQL数据库是支持原子操作的. 什么是数据库的原子操作呢??打个比方,一个消费者在一个商户里刷信用卡消费. 交易正常时,银行在消费者 ...

  10. HTML核心标签之表格标签(二)

    基本用法: <ul type="cir"> <li>显示数据</li> <li>显示数据</li> </ul> ...