BZOJ 2940: [Poi2000]条纹(Multi-Nim)
Description
条纹游戏是一个双人的游戏。所需要的物品有一个棋盘以及三种颜色的长方形条纹,这三种颜色分别是红色、绿色和蓝色。所有的红色条纹的尺寸是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 1 3 1 5 6
Sample Output
1 1 2
HINT
Source
随便yy了一个做法交上去居然A了QWQ....
这题的模型应该是类似于Multi-Nim。
对于拆出来的游戏的SG异或起来就是当前游戏的SG
然后枚举3个线段放在哪儿。
#include<cstdio>
#include<cstring>
const int MAXN=1001;
inline int read()
{
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int f[4],N=1001,SG[MAXN],S[MAXN];
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#else
#endif
for(int i=1;i<=3;i++) f[i]=read();
for(int i=1;i<=N;i++)
{
memset(S,0,sizeof(S));
for(int j=1;j<=3&&f[j]<=i;j++)
for(int k=0;k<=i-f[j];k++)
S[ SG[k]^SG[i-k-f[j]] ] =1;
for(int j=0;;j++) if(!S[j]) {SG[i]=j;break;}
}
int QwQ=read();
while(QwQ--)
{
int p=read();
puts(SG[p]?"1":"2");
}
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法