题目的意思是这样的,给定你若干堆石子,每次你可以从任一堆取出某些固定数量的石子,每次取完后必须保证没堆石子的数量不为0,谁无法操作了就算fail。

刚刚开始看题目的时候有点也没有思路,甚至连Sg函数也没有听过。后来学习了一番,说说自己的想法吧。

_________________有关SG函数的由来,性质及其我个人对sg函数的了解见下一篇日志。

这个题目可以这样考虑,由于每次可取的数字是一个给定的集合,我们可以求出所有的数所对应的sg的函数值(我用的是dp,不过好像跟多人喜欢用记忆化搜)。

由于博弈论里面的许多奇奇怪怪的定理,最终我们只要求出每一堆的石子数所对应的sg值的总共异或值ans,如果ans不等于0,那么说明先手有必胜的策略,否则后手有必胜的策略。

另外说明一下,sg函数值对应的是在当前状态能转化到的所有后继状态sg值中的第一个没有出现的非负整数。很神奇吧。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 10005
using namespace std; bool vis[];
int a[],sg[maxn],n,m,k,ans; void getSG()
{
for (int i=; i<maxn; i++)
{
memset(vis,false,sizeof vis);
for (int j=; j<=n && a[j]<=i; j++) vis[sg[i-a[j]]]=true;
for (int j=; ; j++)
if (!vis[j])
{
sg[i]=j;
break;
}
}
} int main()
{
while (scanf("%d",&n) && n)
{
for (int i=; i<=n; i++) scanf("%d",&a[i]);
sort(a+,a++n);
getSG();
scanf("%d",&m);
while (m--)
{
scanf("%d",&n);
ans=;
while (n--) scanf("%d",&k),ans^=sg[k];
if (ans) printf("W");
else printf("L");
}
printf("\n");
} return ;
}

最新文章

  1. [每日一记] Python报错 IndentationError: unexpected indent
  2. 如何向VS2010中插入ActiveX控件并且附带相应的类
  3. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程08:虚拟键盘实现》--本系列完结
  4. 合理配置MySQL缓存 提高缓存命中率
  5. PHP MySQL 连接数据库 之 Connect
  6. [刷题]算法竞赛入门经典(第2版) 5-2/UVa1594 - Ducci Sequence
  7. create groups 和 create folder reference
  8. PHP 生成毫秒时间戳
  9. robotframework接口之上传图片
  10. [模板]KMP算法
  11. 第十一章 IO流
  12. 运营站点-开放robots后,站内google搜索数量第二天10条左右,第5天搜录9920条,可喜可贺
  13. Newifi2(D1) 刷入pb-boot和breed的记录
  14. PCL—低层次视觉—关键点检测(iss&amp;Trajkovic)
  15. Mysql 关闭自动commit
  16. /etc/rc.d/init.d/functions文件详细分析
  17. python--内置函数清单
  18. Python 矩阵与矩阵以及矩阵与向量的乘法
  19. 转-----FPGA工程师:持守梦想or屈于现实
  20. 【读书笔记】周志华《机器学习》第三版课后习题讨&lt;第一章-绪论&gt;

热门文章

  1. 20155236 《Java程序设计》实验三(敏捷开发与XP实践)实验报告
  2. 20155330 2016-2017-2 《Java程序设计》第三周学习总结
  3. thinkphp 去除空格
  4. python 发红包的小程序
  5. 成都优步uber司机客户端下载-支持安卓、IOS系统、优步司机端Uberpartner
  6. 数据库sql优化总结之1-百万级数据库优化方案+案例分析
  7. Winrar去广告图文教程
  8. Throwable、Error、Exception、RuntimeException的区别与联系
  9. 数据挖掘学习笔记——kaggle 数据预处理
  10. [T-ARA][HUE]