nyoj913 取石子(十) SG函数 + Nimm博弈
思路:
第一堆:SG = n % 3;
第二堆:无规律,打表即可,用hash比set快很多;
第三堆:SG = n;
第四堆:无规律
第五堆:SG = n % 2;
第六堆:SG = n % (i + 1 ),i表示第i堆;
AC代码:
#include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <utility> #include <string> #include <iostream> #include <map> #include <set> #include <vector> #include <queue> #include <stack> using namespace std; #define eps 1e-10 #define inf 0x3f3f3f3f #define PI pair<int, int> typedef long long LL; const int maxn = 1e3 + 5; void in(int &a) { char ch; while((ch=getchar()) < '0' || ch >'9'); for(a = 0; ch >= '0' && ch <= '9'; ch = getchar()) { a = a * 10 + ch - '0'; } } int f[100], SG[2][maxn], o[maxn]; void init() { set<int>s; f[0] = 1; f[1] = 2; SG[0][0] = SG[1][0] = 0; for(int i = 2; i < 100; ++i) f[i] = f[i-1] + f[i-2]; //斐波那契 for(int i = 1; i <= 1000; ++i) { s.clear(); for(int j = 0; j < 100; ++j) { if(f[j] > i) break; s.insert(SG[0][i-f[j]]); } for(int j = 0; j <= 1000; ++j) { if(!s.count(j)) { SG[0][i] = j; break; } } } //偶数 o[0] = 1; for(int i = 1; i <= 600; ++i) o[i] = i * 2; for(int i = 1; i <= 1000; ++i) { s.clear(); for(int j = 0; j < 550; ++j) { if(o[j] > i) break; s.insert(SG[1][i-o[j]]); } for(int j = 0; j <= 1000; ++j) { if(!s.count(j)) { SG[1][i] = j; break; } } } } int main() { init(); int n; while(scanf("%d", &n) == 1 && n) { int x, res = 0; for(int i = 1; i <= n; ++i) { in(x); switch(i){ case 1: res ^= x%3; break; case 2: res ^= SG[0][x]; break; case 3: res ^= x; break; case 4: res ^= SG[1][x]; break; case 5: res ^= x%2; break; default: res ^= x % (i+1); break; } } if(res) printf("Yougth\n"); else printf("Hrdv\n"); } return 0; }
如有不当之处欢迎指出!
nyoj913 取石子(十) SG函数 + Nimm博弈的更多相关文章
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 871 Solved: 365[Submit][Status][Discuss] Description ...
- BZOJ 1874 取石子游戏 - SG函数
Description $N$堆石子, $M$种取石子的方式, 最后取石子的人赢, 问先手是否必胜 $A_i <= 1000$,$ B_i <= 10$ Solution 由于数据很小, ...
- nyoj135 取石子(二) Nimm博弈
思路:计算每堆石子的SG值,然后异或得到总的SG值,如果SG=0则输,否则赢. 每堆石子的SG值等于m%(n+1),可以自己推算一下. AC代码 #include <cstdio> #in ...
- nyoj585 取石子(六) Nimm博弈
此题数据十分极限,需要优化,否则会超时.关于此题的不足:明明说的每堆石子数不超过100,我开一个105大小的数组想用哈希居然Runtime Error!! 后来看见有人说需要优化输入: void in ...
- bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)
1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 733 Solved: 451[Submit][Status ...
- POJ.1067 取石子游戏 (博弈论 威佐夫博弈)
POJ.1067 取石子游戏 (博弈论 威佐夫博弈) 题意分析 简单的威佐夫博弈 博弈论快速入门 代码总览 #include <cstdio> #include <cmath> ...
- HDU 1848 Fibonacci again and again SG函数做博弈
传送门 题意: 有三堆石子,双方轮流从某堆石子中去f个石子,直到不能取,问先手是否必胜,其中f为斐波那契数. 思路: 利用SG函数求解即可. /* * @Author: chenkexing * @D ...
- HDU-1848-Fibonacci again and again(SG函数,博弈)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意: 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样 ...
- 【POJ1067】取石子游戏 (威佐夫博弈)
[题目] Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的 ...
随机推荐
- ImmutableMap
不可变集合,为什么使用它呢?线程安全\更有效的利用内存\可作为常量 ImmutableMap.<String, Object> builder().put("yananList& ...
- SQL Server ——动态SQL
EXECUTE 执行 Transact-SQL 批中的命令字符串.字符串或执行下列模块之一:系统存储过程.用户定义存储过程.标量值用户定义函数或扩展存储过程.SQL Server 2005 扩展了 E ...
- 【转】CString,string,char*综合比较
(一) 概述 1.string和CString均是字符串模a板类: 2.string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中: 3.CString(typedef CString ...
- editplus 常用正则
EditPlus的查找,替换,文件中查找支持以下的正则表达式: Expression Description\t Tab character.\n New line.. Matches any cha ...
- Tensorflow ActiveFunction激活函数解析
Active Function 激活函数 原创文章,请勿转载哦~!! 觉得有用的话,欢迎一起讨论相互学习~Follow Me Tensorflow提供了多种激活函数,在CNN中,人们主要是用tf.nn ...
- Android开发之漫漫长途 XIV——ListView
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- ZOJ 2314 Reactor Cooling [无源汇上下界网络流]
贴个板子 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...
- BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]
题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...
- BZOJ 2329: [HNOI2011]括号修复 [splay 括号]
题目描述 一个合法的括号序列是这样定义的: 空串是合法的. 如果字符串 S 是合法的,则(S)也是合法的. 如果字符串 A 和 B 是合法的,则 AB 也是合法的. 现在给你一个长度为 N 的由‘(' ...
- vue2.0使用slot插槽分发内容
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...