poj 1704 Georgia and Bob(博奕)
2013-04-23 09:28
381 查看
题意:Georgia and Bob
玩游戏,在一条形格子中有N个棋子,他们可以选择任意棋子,往左移到不超过其它棋子和最左边的任意步数。谁不能走谁输。
思路:跟Nim很像,把两个棋子的距离看成一堆石子,因为如果你把左边的棋子移动任意步数,右边的棋子跟着移动相同步数就会抵消(例 2 3
3 等同于 2),这样就转换成Nim游戏了。
//176K
16MS
#include
#include
#include
using namespace std;
const int M = 1005;
int pos[M];
int main ()
{
int
i,m,n;
while
(~scanf ("%d",&n))
{
while (n --)
{
scanf ("%d",&m);
for (i = 0; i < m; i ++)
scanf ("%d",&pos[i]);
sort(pos,pos+m);
int ans = 0;
if (m&1)
{
ans = pos[0] - 1;
for (i = 2;i < m;i += 2)
ans ^= (pos[i] - pos[i-1] - 1);
}
else
{
for (i = 1;i < m;i += 2)
ans ^= (pos[i] - pos[i-1] - 1);
}
if (!ans)
printf ("Bob will win\n");
else
printf ("Georgia will win\n");
}
}
return
0;
}
玩游戏,在一条形格子中有N个棋子,他们可以选择任意棋子,往左移到不超过其它棋子和最左边的任意步数。谁不能走谁输。
思路:跟Nim很像,把两个棋子的距离看成一堆石子,因为如果你把左边的棋子移动任意步数,右边的棋子跟着移动相同步数就会抵消(例 2 3
3 等同于 2),这样就转换成Nim游戏了。
//176K
16MS
#include
#include
#include
using namespace std;
const int M = 1005;
int pos[M];
int main ()
{
int
i,m,n;
while
(~scanf ("%d",&n))
{
while (n --)
{
scanf ("%d",&m);
for (i = 0; i < m; i ++)
scanf ("%d",&pos[i]);
sort(pos,pos+m);
int ans = 0;
if (m&1)
{
ans = pos[0] - 1;
for (i = 2;i < m;i += 2)
ans ^= (pos[i] - pos[i-1] - 1);
}
else
{
for (i = 1;i < m;i += 2)
ans ^= (pos[i] - pos[i-1] - 1);
}
if (!ans)
printf ("Bob will win\n");
else
printf ("Georgia will win\n");
}
}
return
0;
}
相关文章推荐
- Georgia and Bob POJ - 1704 (变形的nim博弈)
- poj 1704 Georgia and Bob (阶梯博弈)
- POJ 1704 Georgia and Bob【博弈】
- POJ-1704-Georgia and Bob
- POJ 1704 Georgia and Bob(阶梯博弈)
- POJ-1704(Georgia and Bob)——博弈论、SG函数
- POJ 1704 Georgia and Bob
- POJ 1704 Georgia and Bob【博弈】
- [POJ1704]Georgia and Bob 博弈论
- POJ 1704 Georgia and Bob [博弈]
- POJ 1704 Georgia and Bob(尼姆博弈)
- POJ 1704 Georgia and Bob
- 【poj 1704】Georgia and Bob
- 【POJ】1704 - Georgia and Bob 博弈->Georgia and Bob(Staircase Nim)
- POJ 1704 Georgia and Bob(nim变型)
- [poj1704]Georgia and Bob_博弈论
- POJ 1704 Georgia and Bob(nim博弈论)
- POJ 1704 Georgia and Bob
- 【POJ】【1704】Georgia and Bob
- POJ1704 Georgia and Bob(博弈)