题意:给你n个数的集合,表示你每次取石子只能为集合里的数,然后给你一排石子,编号为1~n,每次你可以取相邻位置的连续石子(数量只能为集合里的数),注意石子的位置时不变的,比如把2拿走了,1和3还是不相邻的。问先手有没有机会赢。

思路:如果我们取靠边的x个石子那么就是转移成sg[i-x],如果我们取中间的石子,就变成的不相邻的两排,也就是把单一的游戏拆成了两个,然后用sg就好了

原文地址:https://blog.csdn.net/chy20142109/article/details/52145607

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _  ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = 10010, INF = 0x7fffffff;
int sg[maxn], vis[maxn];
int a[maxn];
int main()
{int n, m;while(cin>> n){for(int i=0; i<n; i++)cin>> a[i];sort(a, a+n);sg[0] = 0;for(int i=1; i<=1000; i++){mem(vis, 0);for(int j=0; j<n; j++){if(a[j] > i) break;vis[sg[i-a[j]]] = 1;if(i - a[j] > 1){for(int k=1; k<= i-a[j]-1; k++)vis[sg[k] ^ sg[i-a[j]-k]] = 1;}}for(int j=0; ; j++)if(!vis[j]){sg[i] = j;break;}}cin>> m;for(int i=0; i<m; i++){int temp;cin>> temp;if(sg[temp])cout<< 1 <<endl;elsecout<< 2 <<endl;}}return 0;
}

转载于:https://www.cnblogs.com/WTSRUVF/p/9336171.html

Stone Game, Why are you always there? HDU - 2999(sg定理)相关推荐

  1. HDU - 2973威尔逊定理

    核心问题就是那个等式 我们观察到等式可以写成(n-1)!-1/n-[(n-1)!/n]的形式,这样就应该联想到威尔逊定理了. 回顾一下威尔逊定理的内容:当且仅当n为素数的时候n|(n-1)!-1,n为 ...

  2. hdu 3037 Lucas定理

    题目可以转换成 x1+x2+--+xn=m 有多少组解,m在题中可以取0-m. x1+x2+...+xn = m的解的个数,利用插板法可以得到方案数为: (m+1)*(m+2)...(m+n-1) = ...

  3. HDU 1848 SG函数

    这题运用博弈中的SG函数解决的,感觉初级博弈题用这个很好用但是难一些的还是不会求SG值,就是SG的模板题. #include <iostream> #include<cstdio&g ...

  4. 惹某人突然不舍de第七周(习题+感悟)

    我是个没有感情的WA题机器人 (一)课堂 A - 小兔的棋盘 HDU - 2067 Input Output Sample Input Sample Output AC代码 (二)有趣的题目 A - ...

  5. 【博弈论】博弈论题单题解

    会不断更新的(咕咕咕) 题目难度大致满足非降性 博弈论真是深坑啊,填不动了,还有Nim积.Every-SG游戏等等等等很多题型还不会,先去学别的了 涉及知识: SG函数及SG定理:传送门 博弈论知识总 ...

  6. hdu 4664 Triangulation

    // 题意: 给定N个平面,每个平面有ni个点 // ni个点组成一个凸多边形 // // 然后在N个平面上进行游戏,每次选取一个平面进行 // 在每个平面上可以选择两个点链接一条直线 // 每次选择 ...

  7. (转载)--SG函数和SG定理【详解】

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  8. 组合博弈游戏 - SG函数和SG定理

    转载来自:http://blog.csdn.net/luomingjun12315/article/details/45555495 在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜 ...

  9. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

最新文章

  1. AS3 Drawing API演讲稿
  2. Spring中日期格式转换
  3. java学习论坛汇总
  4. c语言程序为什么运行一半就自动关闭了,C语言为什么程序运行一半就出现停止工作...
  5. JavaFX逆运动学库2.0
  6. [原创]FineUI秘密花园(二十一) — 表格之动态创建列
  7. 鸿蒙行车记录仪,百度导航新增行车记录仪功能 可消除碰瓷风险
  8. MongoDB小型文档型数据库使用
  9. 聊一聊 “超 大 模 型”
  10. SSH家政服务系统设计与实现答辩PPT免费下载
  11. 手工修复Win 7下彩影ARP防火墙驱动程序(适用于32/64位系统)
  12. PyKDL---正运动学和逆运动学
  13. 运算服务器v9型号,V9服务器
  14. 英语数字转换器(POJ NO.1123)
  15. 北京首都国际机场1号航站楼、2号航站楼、3号航站楼航空公司名单
  16. FBE 与FDE学习总结
  17. 稳压二极管和TVS二极管的区别
  18. 酷睿i5 12500h怎么样 i512500h是标压吗
  19. 【基于人脸特征的心率检测研究】非接触式光电容积图和红外人脸视频瞬时心率估计
  20. MySQL使用GROUP BY分组时如何留下指定的行

热门文章

  1. 基友扫雷通关跟我炫耀!于是用Python自动扫雷程序十秒通关
  2. php msi安装教程,如何判断msi安装包程序是否安装及安装路径
  3. CVPR2019| 最新CVPR2019论文抢先看!
  4. 量子科技概念大火,国内现状如何?华为BAT均入局量子计算
  5. 收藏 | 程序员必须掌握哪些算法?
  6. 《Python编程从入门到实践》记录之range、min、max、sum函数
  7. rsa java模数_RSA公私钥获取模数和质数
  8. linux gdb打印内存命令,gdb中查看内存方法总结
  9. word修改一处另一处自动修改_这么做让word自动记录修改明细,再也不用一个字一个字的核对了...
  10. Kali Linux 从入门到精通(三)-入侵系统定制