题目链接:

http://poj.org/problem?id=2960

S-Nim

Time Limit: 2000MS
Memory Limit: 65536K
#### 问题描述
> Arthur and his sister Caroll have been playing a game called Nim for some time now. Nim is played as follows:
> The starting position has a number of heaps, all containing some, not necessarily equal, number of beads.
> The players take turns chosing a heap and removing a positive number of beads from it.
> The first player not able to make a move, loses.
> Arthur and Caroll really enjoyed playing this simple game until they
> recently learned an easy way to always be able to find the best move:
> Xor the number of beads in the heaps in the current position (i.e. if we have 2, 4 and 7 the xor-sum will be 1 as 2 xor 4 xor 7 = 1).
> If the xor-sum is 0, too bad, you will lose.
> Otherwise, move such that the xor-sum becomes 0. This is always possible.
> It is quite easy to convince oneself that this works. Consider these facts:
> The player that takes the last bead wins.
> After the winning player's last move the xor-sum will be 0.
> The xor-sum will change after every move.
> Which means that if you make sure that the xor-sum always is 0 when you have made your move, your opponent will never be able to win, and, thus, you will win.
>
> Understandibly it is no fun to play a game when both players know how to play perfectly (ignorance is bliss). Fourtunately, Arthur and Caroll soon came up with a similar game, S-Nim, that seemed to solve this problem. Each player is now only allowed to remove a number of beads in some predefined set S, e.g. if we have S = {2, 5} each player is only allowed to remove 2 or 5 beads. Now it is not always possible to make the xor-sum 0 and, thus, the strategy above is useless. Or is it?
>
> your job is to write a program that determines if a position of S-Nim is a losing or a winning position. A position is a winning position if there is at least one move to a losing position. A position is a losing position if there are no moves to a losing position. This means, as expected, that a position with no legal moves is a losing position.

输入

Input consists of a number of test cases.

For each test case: The first line contains a number k (0 < k ≤ 100) describing the size of S, followed by k numbers si (0 < si ≤ 10000) describing S. The second line contains a number m (0 < m ≤ 100) describing the number of positions to evaluate. The next m lines each contain a number l (0 < l ≤ 100) describing the number of heaps and l numbers hi (0 ≤ hi ≤ 10000) describing the number of beads in the heaps.

The last test case is followed by a 0 on a line of its own.

输出

For each position: If the described position is a winning position print a 'W'.If the described position is a losing position print an 'L'.

Print a newline after each test case.

样例

sample input

2 2 5

3

2 5 12

3 2 4 7

4 2 3 7 12

5 1 2 3 4 5

3

2 5 12

3 2 4 7

4 2 3 7 12

0

sample output

LWW

WWL

题意

题目是对石子问题的改遍,限制了取石子的个数。

题解

由于数据比较小,我们暴力求出一堆的情况下的SG值,然后每一堆的SG值异或一下就是答案。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std; const int maxn=111;
const int maxm = 10101; int st[maxn],sg[maxm];
int vis[maxm];
int n, m; void get_sg() {
sort(st, st + n);
for (int i = 0; i < st[0]; i++) {
sg[i] = 0;
}
for (int i = st[0]; i < maxm; i++) {
memset(vis, 0, sizeof(vis));
for (int j = 0; j < n; j++) {
if (i - st[j] >= 0) {
vis[sg[i - st[j]]] = 1;
}
}
for (int j = 0;; j++) if (!vis[j]) {
sg[i] = j; break;
}
}
} int main() {
while (scanf("%d", &n) == 1 && n) {
for (int i = 0; i < n; i++) scanf("%d", &st[i]);
get_sg();
scanf("%d", &m);
string ans;
while (m--) {
int sum = 0;
int cnt; scanf("%d", &cnt);
for (int i = 0; i < cnt; i++) {
int x; scanf("%d", &x);
sum ^= sg[x];
}
if (sum == 0) ans += 'L';
else ans += 'W';
}
printf("%s\n", ans.c_str());
}
return 0;
}

POJ 2960 博弈论的更多相关文章

  1. poj 2960 S-Nim

    S-Nim Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4113   Accepted: 2158 Description ...

  2. HDU3544 Alice's Game && POJ 2960 S-Nim(SG函数)

    题意: 有一块xi*Yi的矩形巧克力,Alice只允许垂直分割巧克力,Bob只允许水平分割巧克力.具体来说,对于Alice,一块巧克力X i * Y i,只能分解成a * Y i和b * Y i其中a ...

  3. POJ 2960 S-Nim 博弈论 sg函数

    http://poj.org/problem?id=2960 sg函数几乎是模板题. 调试代码的最大障碍仍然是手残在循环里打错变量名,是时候换个hydra产的机械臂了[超想要.jpg] #includ ...

  4. hdu 1536/1944 / POJ 2960 / ZOJ 3084 S-Nim 博弈论

    简单的SG函数应用!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #inclu ...

  5. POJ 2960 S-Nim<博弈>

    链接:http://poj.org/problem?id=2960 #include<stdio.h> #include<string.h> ; ; int SG[N];//S ...

  6. POJ 2960 S-Nim (sg函数)

    题目链接:http://poj.org/problem?id=2960 题目大意:给定数组S,接下来给出m个游戏局面.游戏局面是一些beads堆,先给出堆数,然后是每一堆中beads的数目.游戏规则是 ...

  7. poj 2960 S-Nim(SG函数)

    S-Nim Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3694   Accepted: 1936 Description ...

  8. poj 2960 S-Nim【SG函数】

    预处理出SG函数,然后像普通nim一样做即可 #include<iostream> #include<cstdio> using namespace std; const in ...

  9. POJ 2960

    也算是一道模板题吧,只需按照SG函数的定义求出每个值的SG,然后异或就可以了. #include <iostream> #include <cstdio> #include & ...

随机推荐

  1. The given path's format is not supported.

    问题 编程以来今本没有使用input[type=file]这个控件过,今天突然使用尽然报错了,在本地chrome,firefox等其他的浏览器都是好的,唯独ie报错了.在服务器的时候,尽然chrome ...

  2. 利用Jquery处理跨域请求

    在项目制作过程中,可能会用到ajax来提高用户体验,这里终于研究出来,利用jquery来进行跨域请求,在用$.getJSON这个方法时,前台页面中需这样写 $.getJSON(“需要提交处理的url? ...

  3. SQL Server 遇到 Automation服务器不能创建对象

    Windows 2003  安装SQL Server出现Automation问题  如下:  ######安装SQL Server 遇到 Automation服务器不能创建对象问题 解决办法: 1.1 ...

  4. wpMVVM模式绑定集合的应用

    一.新建一个项目,命名为wpMVVMone,添加一个有关食品信息的类Food.CS,代码如下: public class Food { public string Name { get; set; } ...

  5. mr的logs的查看

    在map或者reduce函数中使用System.out.println打印的信息沾满查看呢? 步骤1:启动history server /usr/local/hadoop-2.6.0/sbin/mr- ...

  6. LotusPhp起步:经典的HelloWorld

    写了几篇LotusPhp,一直没有跑个程序,感觉好像步骤有点错,所以先上个经典的Demo,HelloWorld吧 先按推荐目录建好文件夹,如果懒的建,下面有下载的Demo包,解压就可以用,因为简单,也 ...

  7. 通过Eclipse创建SQLite数据库

    import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database ...

  8. ElasticSearch.js

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  9. IOS应用程序生命周期

    一.IOS应用的5种状态 Not Running(非运行状态) 应用没有运行或被系统终止. Inactive(前台非活动状态) 应用正在进入前台状态,但是还不能接受事件处理. Active(前台活动状 ...

  10. web.config的奇淫巧技

    <connectionStrings configSource="db.config"/> 外部文件db.config: <connectionStrings&g ...