题意:有n堆石子,每次可以将其中一堆分为数量不为0的3堆,或者从其中一堆中拿走若干个,最终拿完的那个人赢。

  思路:直接暴力SG状态,然后找出其中的规律,异或一下每一堆的状态就可以了。

#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int maxn = 1e3 + ;bool flag[maxn];
int sg[maxn]; int getSg(int x){
if(sg[x] != -) return sg[x];
memset(flag, , sizeof(flag));
for(int i = ; i < x; i ++){
int sgi = getSg(i);
for(int j = ; j < x - i; j ++){
int sgj = getSg(j);
int sgk = getSg(x - i - j);
flag[sgi^sgj^sgk] = true;
}
flag[i] = true;
}
for(int i = ; ;i ++) if(!flag[i]) return i;
} int main(){
int T = , n;
memset(sg, - , sizeof(sg));
for(int i = ; i <= T; i ++){
printf("%d %d\n", i, sg[i] = getSg(i));
}
return ;
}
#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int maxn = 1e3 + ;int getSg(int x){
if(x <= ) return x;
else if(x % == ) return x + ;
else if(x % == ) return x - ;
else return x;
} int main(){
int T, n, m;scanf("%d", &T);
for(int ncase = ; ncase <= T; ncase ++){
scanf("%d", &n);
int sta = ;
for(int i = ; i < n; i ++){
scanf("%d", &m);
sta ^= getSg(m);
}
printf("%s\n", sta?"First player wins.":"Second player wins.");
}
return ;
}

A Simple Nim (SG打表找规律)的更多相关文章

  1. HDU 3032 Nim or not Nim?(SG打表找规律)

    题意: 给你n堆石子,你每次只能操作一堆石子 1.拿去任意个,最少1个 2.把这一堆分成两堆,没有要求对半分 解析+代码: 1 //解题思路: 2 //对于一个给定的有向无环图,定义关于图的每个顶点的 ...

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

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

  3. HDU 3032 (SG打表找规律)

    题意: 有n堆石子,alice先取,每次可以选择拿走一堆石子中的1~x(该堆石子总数) ,也可以选择将这堆石子分成任意的两堆.alice与bob轮流取,取走最后一个石子的人胜利. 思路: 因为数的范围 ...

  4. HDU 3032 Nim or not Nim?(博弈,SG打表找规律)

    Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. hdu 3032 sg打表找规律 *

    有n堆石子,alice先取,每次可以选择拿走一堆石子中的1~x(该堆石子总数) ,也可以选择将这堆石子分成任意的两堆.alice与bob轮流取,取走最后一个石子的人胜利. 打表代码: #include ...

  6. hdu 2147 kiki's game(DP(SG)打表找规律)

    题意: n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边. 无法移动硬币的人负. 给出n和m,问,先手胜还是后手胜. 数据范围: n, m (0<n ...

  7. hdu_5795_A Simple Nim(打表找规律的博弈)

    题目链接:hdu_5795_A Simple Nim 题意: 有N堆石子,你可以取每堆的1-m个,也可以将这堆石子分成3堆,问你先手输还是赢 题解: 打表找规律可得: sg[0]=0 当x=8k+7时 ...

  8. hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)

    Nim or not Nim? Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  9. hdu 3032 Nim or not Nim? (sg函数打表找规律)

    题意:有N堆石子,每堆有s[i]个,Alice和Bob两人轮流取石子,可以从一堆中取任意多的石子,也可以把一堆石子分成两小堆 Alice先取,问谁能获胜 思路:首先观察这道题的数据范围  1 ≤ N ...

随机推荐

  1. selenium基础实例学习

    在这里我们通过selenium官方文档做给的实例以及翻译,做出如果代码注释   from selenium import webdriverfrom selenium.webdriver.common ...

  2. mongodb 遇到的问题一 Error: connect ECONNREFUSED 127.0.0.1:27017

    node配合mongodb是配置完成后,访问时出现 Error: connect ECONNREFUSED 127.0.0.1:27017,的报错 原因在于你的mongodb数据库没开, node下的 ...

  3. Mouse w/o Borders实现两台主机共用一套键鼠方法及问题处理

    因为经常遇到同时用到实验室配备的主机和自己的笔记本同时使用的场景,两台设备需要切换两套键鼠很麻烦,这里介绍一个微软开发的一个免费软件Microsoft Garage Mouse without Bor ...

  4. Python编码规范:IF中的多行条件

    Python编码规范:IF中的多行条件 转载 2017年03月08日 09:40:45 http://blog.csdn.net/wsc449/article/details/60866700 有时我 ...

  5. maven与eclipse集成

    https://www.cnblogs.com/teach/p/5906425.html

  6. 转UI么?不想

    最近一直在弄UI   对于UI实在是不想弄了    很痛苦...我一开始都比较热衷后台开发  但是前端UI 我只是有点兴趣而已,但是还一直要做...太累了    或许要学的东西还是有很多的!一直不知道 ...

  7. DevExpress控件GridControl中的布局详解 【转】

    DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28|  分类: devexpress |  标签:devexpress  |举报|字号 订阅   ...

  8. vmware您无权输入许可证密钥,请请使用系统管理员账户重试

    vmware15,输入许可证时报“您无权输入许可证密钥,请请使用系统管理员账户重试”,切换到Administrator以后,并没有什么作用. 网上的各种进入cmd的方法也无效. 后来发现,只要是已经存 ...

  9. GParted: GNOME Partition Editor, sharp weapon to modify disk partitions.

    GParted Projects GNOME Partition Editor for creating, reorganizing, and deleting disk partitions. It ...

  10. 几何入门合集 gym101968 problem F. Mirror + gym102082 Problem F Fair Chocolate-Cutting + gym101915 problem B. Ali and Wi-Fi

    abstract: V const & a 加速 F. Mirror 题意 链接 问题: 有n个人在y=0的平面上(及xoz平面).z=0平面上有一面镜子(边平行于坐标轴).z=a平面上有q个 ...