HDU 5795 A Simple Nim(简单Nim)
HDU 5795 A Simple Nim(简单Nim)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Problem Description - 题目描述
Two players take turns picking candies from n heaps,the player who picks the last one will win the game.On each turn they can pick any number of candies which come from the same heap(picking no candy is not allowed).To make the game more interesting, players can separate one heap into three smaller heaps(no empty heaps)instead of the picking operation.Please find out which player will win the game if each of them never make mistakes.
两个玩家轮流从n堆糖中挑若干糖果,选到最后一颗糖的人赢得游戏。他们每回合他们可以在同一堆糖上取任意数量的糖果(不能不拿)。为了让游戏更有意思,玩家可以选择把某堆糖一分为三(没有空堆)而不去取糖果。在两人皆不犯错的情况下,找出游戏的赢家。
CN
Input - 输入
Intput contains multiple test cases. The first line is an integer 1≤T≤100, the number of test cases. Each case begins with an integer n, indicating the number of the heaps, the next line contains N integers s[0],s[1],....,s[n−1], representing heaps with s[0],s[1],...,s[n−1] objects respectively.(1≤n≤106,1≤s[i]≤109)
多组测试用例。第一行是一个整数1≤T≤,表示测试用例的数量。每组测试用例以一个整数n打头,表示糖果的堆数,随有N个整数s[],s[],....,s[n−], 分别表示各堆糖果的数量。(≤n≤^,≤s[i]≤^)
CN
Output - 输出
For each test case,output a line whick contains either"First player wins."or"Second player wins".
对于每个测试用例,输出一行"First player wins."或"Second player wins"。
CN
Sample Input - 输入样例
2
2
4 4
3
1 2 4
Sample Output - 输出样例
Second player wins.
First player wins.
题解
暴力出奇迹,搜索是真知,打表找规律,反正SG……
代码 C++
#include <cstdio>
#include <cstring>
#define mx 100
int sg[mx], w[mx << ];
void rdy(){
int i1, i2, i3, i, j;
memset(sg, , sizeof(sg));
for (i = ; i < mx; ++i){
memset(w, , sizeof(w));
for (j = ; j < i; ++j) w[sg[j]] = ;
if (i >= ){
for (i1 = ; i1 * <= i; ++i1){
for (i2 = i1; i1 + i2 * <= i; ++i2){
i3 = i - i1 - i2;
if (i3 >= i2) w[sg[i1] ^ sg[i2] ^ sg[i3]] = ;
}
}
}
for (j = ; w[j]; ++j);
sg[i] = j;
}
}
int main(){
rdy();
int n, i;
for (i = ; i < mx; ++i){
if (sg[i] != i) printf("i=%d sg=%d\n", i, sg[i]);
}
return ;
}
打表围观
#include <cstdio>
int sg(int i){
if (i % == || (i + ) % == ){
if (i & ) ++i;
else --i;
}
return i;
}
int main(){
int t, n, s, opt;
scanf("%d", &t);
while (t--){
scanf("%d", &n); opt = ;
for (opt = ; n--; opt ^= sg(s)) scanf("%d", &s);
if (opt) puts("First player wins.");
else puts("Second player wins.");
}
return ;
}
HDU 5795 A Simple Nim(简单Nim)的更多相关文章
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
- HDU 5795 A Simple Nim (博弈 打表找规律)
A Simple Nim 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 Description Two players take turns ...
- HDU 5795 A Simple Nim 打表求SG函数的规律
A Simple Nim Problem Description Two players take turns picking candies from n heaps,the player wh ...
- HDU 5795 A Simple Nim (博弈) ---2016杭电多校联合第六场
A Simple Nim Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- hdu 5795 A Simple Nim 博弈sg函数
A Simple Nim Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pro ...
- HDU 5795 A Simple Nim ——(Nim博弈 + 打表)
题意:在nim游戏的规则上再增加了一条,即可以将任意一堆分为三堆都不为0的子堆也视为一次操作. 分析:打表找sg值的规律即可. 感想:又学会了一种新的方法,以后看到sg值找不出规律的,就打表即可~ 打 ...
- HDU 5795 A Simple Nim
打表找SG函数规律. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> ...
- HDU 5795:A Simple Nim(博弈)
http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Problem Description Two players take t ...
- HDU 5795 博弈
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Time Limit: 2000/1000 MS (Java/Oth ...
随机推荐
- Objective-C 中类属性(修饰)
Objective-C 中类属性(修饰) (2013-07-13 14:38:35) 转载▼ 标签: it 分类: IOS笔记 nonatomic: 非原子性访问,对属性赋值的时候不加锁,多线程并发访 ...
- ModSecurity 白名单设置
方法一.SecRuleRemoveById 指令:通过Rule ID禁用指定规则 #waf whitelist <LocationMatch .*> SecRuleRemoveById 9 ...
- Android WebView常见问题及解决方案汇总
Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...
- Composer : php依赖管理工具
原始时代 我记得在当时用php的时候还没有composer,只有个pear,但是不好用呀,还不如直接在互联网上到处复制代码了,更快更不容易出错,当时也没有github这么好的社区工具了 总结如下 代码 ...
- OpenERP/Odoo命令行参数
http://blog.sina.com.cn/s/blog_7cb52fa80102v8h1.html
- ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式
方式一: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } public DateTime start ...
- JavaMail接、收邮件
我总算把这个研究出来啦.... 不要觉得 代码有点多哈. 我们先来说发送邮箱吧,首先建立一个属性文件*.properties sys.properties server=smtp.163.com ## ...
- JAVA - ATM机程序
ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ // ...
- Aggregate
对序列应用累加器函数. /// <summary> /// 计算校验和,SUM /// </summary> public byte CalculateCheckSum(byt ...
- 产生0-9 A-Z a-z
>题目要求: >>产生26个大写字母 >>产生26个小写字母 >>产生0-9这10个阿拉伯数字 >程序实现: package cn.fury.test; ...