2940: [Poi2000]条纹

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 114  Solved: 72
[Submit][Status][Discuss]

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

code

 #include<cstdio>
#include<cstring>
#include<set> using namespace std;
int c,z,n,p,T;
int sg[]; int get_SG(int x) {
if (sg[x]!=-) return sg[x];
set<int>s;
for (int i=; i<=(x-c); ++i) //枚举左边的长度
s.insert(get_SG(i)^get_SG(x-i-c));
for (int i=; i<=(x-z); ++i)
s.insert(get_SG(i)^get_SG(x-i-z));
for (int i=; i<=(x-n); ++i)
s.insert(get_SG(i)^get_SG(x-i-n));
for (int j=; ; ++j)
if (!s.count(j)) {sg[x]=j;break;}
return sg[x];
}
int main () {
memset(sg,-,sizeof(sg));
sg[] = ;
scanf("%d%d%d%d",&c,&z,&n,&T);
while (T--) {
scanf("%d",&p);
if (get_SG(p)==) puts("");
else puts("");
}
return ;
}

开始理解错题目了。。。TLE

 #include<cstdio>
#include<cstring>
#include<set> using namespace std;
int c,z,n,p,T;
int sg[][]; int get_SG(int l,int r) {
if (l > r) return ;
if (sg[l][r]!=-) return sg[l][r];
set<int>s;
for (int i=l; i<=(r-c+); ++i)
s.insert(get_SG(l,i-)^get_SG(i+c,r));
for (int i=l; i<=(r-z+); ++i)
s.insert(get_SG(l,i-)^get_SG(i+z,r));
for (int i=l; i<=(r-n+); ++i)
s.insert(get_SG(l,i-)^get_SG(i+n,r));
for (int j=; ; ++j)
if (!s.count(j)) {sg[l][r]=j;break;}
return sg[l][r];
}
int main () {
memset(sg,-,sizeof(sg));
sg[][] = ;
scanf("%d%d%d%d",&c,&z,&n,&T);
while (T--) {
scanf("%d",&p);
if (get_SG(,p)==) puts("");
else puts("");
}
return ;
}

2940: [Poi2000]条纹(Multi_SG)的更多相关文章

  1. BZOJ 2940: [Poi2000]条纹(Multi-Nim)

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 110  Solved: 70[Submit][Status][Discuss] Description ...

  2. bzoj2940: [Poi2000]条纹

    2940: [Poi2000]条纹 条纹游戏是一个双人的游戏.所需要的物品有一个棋盘以及三种颜色的长方形条纹,这三种颜色分别是红色.绿色和蓝色.所有的红色条纹的尺寸是c*1,所有的绿色条纹的尺寸是z* ...

  3. bzoj千题计划260:bzoj2940: [Poi2000]条纹

    http://www.lydsy.com/JudgeOnline/problem.php?id=2940 SG 博弈入门推荐张一飞的<由感性认识到理性认识 ——透析一类搏弈游戏的解答过程> ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. BZOJ练习记

    决定从头到尾干一波BZOJ!可能会写没几题就停下吧,但还是想学学新姿势啦. 1001. [BeiJing2006]狼抓兔子 即求 $(1, 1)$ 到 $(n, m)$ 的最小割.跑 dinic 即可 ...

  6. 【BZOJ】【2940】【POI2000】条纹

    博弈论 一开始想成S-Nim了……后来发现不一样= =石子是一定得取的,但是这个铺条纹就像Crosses and Crosses一样,是可以铺到中间,左右留下空隙但是对手无处可放的…… 所以就是两道题 ...

  7. BZOJ 2946: [Poi2000]公共串

    2946: [Poi2000]公共串 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 342[Submit][Status][D ...

  8. 用css实现条纹背景

    我先额外的说一下怎么用CSS绘制三角形: 绘制三角形是把边框加粗,将元素的宽高都设为0,让其余的边框颜色透明,下面我们来看实现的代码: 先把边框的颜色设置成不同颜色: #div{ border-col ...

  9. iOS开发UI篇—Quartz2D使用(信纸条纹)

    iOS开发UI篇—Quartz2D使用(信纸条纹) 一.前导程序 新建一个项目,在主控制器文件中实现以下几行代码,就能轻松的完成图片在视图中的平铺. #import "YYViewContr ...

随机推荐

  1. 开发原则&设计模式

    1.关于软件开发中的开发原则和设计模式: 1.1.开发原则 1.1.1.什么是开发原则? 开发原则就是开发的依据,只要依照这些原则进行开发,将来开发的软件具有很强的扩展力,很低的耦合度. 开发原则不属 ...

  2. java 基础 02 数据类型、运算符、分支结构

    内容: (1)数据类型 (2)运算符 (3)分支结构 1.数据类型 java语言中的基本数据类型:byte.short.int.long.float.double.boolean.char. 1.1布 ...

  3. CentOs7 修复 引导启动

    一.修复MBR: MBR(Master Boot Record主引导记录): 硬盘的0柱面.0磁头.1扇区称为主引导扇区.其中446Byte是bootloader,64Byte为Partition t ...

  4. scrum敏捷开发☞

    scrum是什么?说白了就是自带一些规则的工具,团队成员按照scrum的规则计划项目,执行项目,完成项目..可以让团队提高工作效率 当前除了scrum还有其他很多类似的像Kanban,XP,RUP(规 ...

  5. 常量池与方法区以及又读new String对象创建问题

    又拿出这道String str1 = new String("abc");创建几个对象的面试题梳理了一下常量池与方法区的关系,希望能把这两者的关系通过这道面试题说明白 方法区是什么 ...

  6. Struts2 In Action笔记_页面到动作的数据流入和流出

    因为回答百度知道的一个问题,仔细查看了<Struts2 In Action>,深入细致的看了 “数据转移OGNL 和 构建视图-标签”,很多东西才恍然大悟. 一直觉得国外写的书很浮,不具有 ...

  7. python换行

    python中如果一行代码太长,看着不方便时,怎么办? 只需要在需要换行的地方添加上符号 \ 就行了.

  8. Qt之QThread随记

    这是一篇随记,排版什么的就没有那么好了:) 首先要知道,一个线程在资源分配完之后是以某段代码为起点开始执行的,例如STL内的std::thread,POSIX下的pthread等,都是以函数加其参数之 ...

  9. 1503: [NOI2004]郁闷的出纳员

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 13723  Solved: 4989[Submit][Status][Discuss] Descripti ...

  10. IE支持直接查看Json数据注册表代码

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json] ...