bzoj 2940: [Poi2000]条纹 (Multi-SG游戏)
2016-12-23 21:15
239 查看
2940: [Poi2000]条纹
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 83 Solved: 54
[Submit][Status][Discuss]
Description
[align=center][/align]条纹游戏是一个双人的游戏。所需要的物品有一个棋盘以及三种颜色的长方形条纹,这三种颜色分别是红色、绿色和蓝色。所有的红色条纹的尺寸是c*1,所有的绿色条纹的尺寸是z*1,所有的蓝色条纹的尺寸是n*1,这里c,z,n是正整数。每种颜色的条纹每个游戏者都拥有无限多个。
一个棋盘是一个尺寸为p*1的长方形,由p个1*1的方格组成。
游戏者轮流走,每一步都是由一个游戏者任选一种长方形条纹覆盖到棋盘上,并要求遵循以下规则:
l 条纹不能伸出棋盘之外。
l 不能覆盖在已有的条纹之上(即使部分也不行)。
l 条纹的边缘必须与棋盘方格的边缘相重叠。谁不能再走,谁就输了。
先手是指在游戏中第一个走的游戏者。那么是否不管后手怎么走,先手都有必胜策略呢?
任务:
写一个程序:
l 读入条纹的尺寸以及至少一个棋盘的尺寸。
l 对每一个给出的棋盘判断先手是否必胜。
l 将结果输出。
Input
第一行包含三个整数c,z,n(1<=c,z,,n<=1000),表示三种条纹的长度,依次为红色,绿色以及蓝色。每两个数之间都用空格隔开。文件的第二行包括一个整数m(1 <= m <= 1000)表示需要考虑的不同棋盘个数。以下3到m+2行每行包括一个整数p(1<=p<=1000)。第i+2行表示第i个棋盘的长度。
Output
应当包含m行。只有一个数字应当被写入文件的第i行:l 1—如果对第i个棋盘先手有必胜策略。
l 2—其它。
Sample Input
1 5 13
1
5
6
Sample Output
11
2
HINT
Source
[Submit][Status][Discuss]
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define N 2003
using namespace std;
int sg
,a,b,c,n;
int get(int x)
{
if (sg[x]!=-1) return sg[x];
int hash
;
memset(hash,0,sizeof(hash));
if (x>=a)
for (int i=1;i<=x-a+1;i++) hash[get(i-1)^get(x-i-a+1)]=1;
if (x>=b)
for (int i=1;i<=x-b+1;i++) hash[get(i-1)^get(x-i-b+1)]=1;
if (x>=c)
for (int i=1;i<=x-c+1;i++) hash[get(i-1)^get(x-i-c+1)]=1;
for (int i=0;i<=x;i++)
if (!hash[i]) {
sg[x]=i;
return sg[x];
}
}
int main()
{
freopen("a.in","r",stdin);
freopen("my.out","w",stdout);
scanf("%d%d%d",&a,&b,&c);
scanf("%d",&n);
memset(sg,-1,sizeof(sg));
for (int i=0;i<min(a,min(b,c));i++) sg[i]=0;
for (int i=1;i<=n;i++) {
int x; scanf("%d",&x);
get(x);
//for (int i=1;i<=x;i++) cout<<sg[i]<<" ";
//cout<<endl;
if (sg[x]) puts("1");
else puts("2");
}
}
相关文章推荐
- [BZOJ2940][Poi2000]条纹(博弈Multi-SG游戏)
- 2940: [Poi2000]条纹(Multi_SG)
- BZOJ 2940: [Poi2000]条纹(Multi-Nim)
- 【BZOJ】【2940】【POI2000】条纹
- bzoj千题计划260:bzoj2940: [Poi2000]条纹
- [Multi-SG] POJ 3537 Crosses and Crosses & BZOJ 2940 [Poi2000]条纹
- 【bzoj2946】[Poi2000]公共串
- BZOJ 2976: [Poi2002]出圈游戏 HDU 5668 CRT
- 后缀自动机 模板 【Poi2000】 公共串 bzoj 2946
- [博弈论][阶梯博弈] BZOJ 1115:POI2009 石子游戏Kam
- [BZOJ 1115] [POI2009] 石子游戏Kam 【阶梯博弈】
- BZOJ 2946 [Poi2000]公共串 后缀自动机
- bzoj1115: [POI2009]石子游戏Kam
- POJ Christmas Game [树上删边游戏 Multi-SG]
- BZOJ2946: [Poi2000]公共串
- bzoj 2946: [Poi2000]公共串
- 【二分答案】【分块答案】【字符串哈希】【set】bzoj2946 [Poi2000]公共串
- 【众数】【bzoj 2945】: [Poi2000]气垫船
- [贪心 构造] BZOJ 2943 [Poi2000]三臂起重机 Triple-Arm Crane
- bzoj2946 [Poi2000]公共串