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)的更多相关文章

  1. HDU 5795 A Simple Nim(SG打表找规律)

    SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...

  2. HDU 5795 A Simple Nim (博弈 打表找规律)

    A Simple Nim 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 Description Two players take turns ...

  3. HDU 5795 A Simple Nim 打表求SG函数的规律

    A Simple Nim Problem Description   Two players take turns picking candies from n heaps,the player wh ...

  4. HDU 5795 A Simple Nim (博弈) ---2016杭电多校联合第六场

    A Simple Nim Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. hdu 5795 A Simple Nim 博弈sg函数

    A Simple Nim Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Pro ...

  6. HDU 5795 A Simple Nim ——(Nim博弈 + 打表)

    题意:在nim游戏的规则上再增加了一条,即可以将任意一堆分为三堆都不为0的子堆也视为一次操作. 分析:打表找sg值的规律即可. 感想:又学会了一种新的方法,以后看到sg值找不出规律的,就打表即可~ 打 ...

  7. HDU 5795 A Simple Nim

    打表找SG函数规律. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> ...

  8. HDU 5795:A Simple Nim(博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Problem Description   Two players take t ...

  9. HDU 5795 博弈

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Time Limit: 2000/1000 MS (Java/Oth ...

随机推荐

  1. Android监听Home键

    监听广播  ACTION_CLOSE_SYSTEM_DIALOGS private void registerHomeReceiver(){ IntentFilter homeFilter = new ...

  2. Yii源码阅读笔记(二十六)

    Application 类中设置路径的方法和调用ServiceLocator(服务定位器)加载运行时的组件的方法注释: /** * Handles the specified request. * 处 ...

  3. phpcms v9 的表单向导功能的使用方法

    本文主要介绍phpcms v9的表单向导功能是如何使用的,并副多个案例讲解: 先介绍一下v9 的表单向导如何使用 表单向导做的很实用,生成一个表单,常用的是把它作为一个留言板,或者在招聘栏目作为一个供 ...

  4. 远程出发jenkins jobs

    wget -O - -q "http://jenkins_server/job/ttt/buildWithParameters?TEST1=Value" wget -O - -q ...

  5. Mac更换Sublime Text程序图标

    更换方法: 下载.icns格式一个图标.http://www.easyicon.net/language.en/iconsearch/sublime/ 终端执行:open /Applications/ ...

  6. Aggregate

    对序列应用累加器函数. /// <summary> /// 计算校验和,SUM /// </summary> public byte CalculateCheckSum(byt ...

  7. #if 0在代码中的作用

    #if 0在代码中有2个作用. 1.作为行内注释 /**/是多行注释,如果想在/**/里面嵌套一个多行注释,怎么办呢? /* int a=10; /* - (void)test{ NSLog(@&qu ...

  8. 使用Go开发HTTP中间件

    原文地址    再web开发的背景下,"中间件"通常意思是"包装原始应用并添加一些额外的功能的应用的一部分".这个概念似乎总是不被人理解,但是我认为中间件非常棒 ...

  9. cookie的三种操作方法

    1,jquery.cookie.js 这一篇文章已经写的很详细了: http://www.cnblogs.com/afuge/archive/2013/07/03/3169048.html 2,原生j ...

  10. AJax 跨域问题

    从AJAX诞生那天起,XMLHttprequest对象不能跨域请求的问题就一直存在.这似乎是一个很经典的问题了.是由于javascript的同源策略(这里不作深入探讨)所导致. 解决的办法,大概有如下 ...