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. jQuery读取和设定KindEditor值的方法

    转载自:https://www.jb51.net/article/43595.htm 侵删 jQuery读取和设定KindEditor值的方法 更新时间:2013年11月22日 09:03:56   ...

  2. cf1051F. The Shortest Statement(最短路)

    题意 题目链接 题意:给出一张无向图,每次询问两点之间的最短路,满足$m - n <= 20$ $n, m, q \leqslant 10^5$ Sol 非常好的一道题. 首先建出一个dfs树. ...

  3. EasyUI Combobox 的 onChange,onSelect,onClick 事件

    EasyUI 中 Combobox 选项发生改变时会触发 onChange,onSelect,onClick,3 个事件.最近要做一个级联的 Combo 菜单,类似于选择地址时让用户填写省,市,区的菜 ...

  4. FreeBSD 安裝 wget

    cd /usr/ports/ftp/wgetmake install clean pkg_add -r wget就可以把wget安装上去了

  5. Java 中 Double 相关问题

    在项目当中,对于double类型数据的使用比较频繁.尤其是处理金钱相关的数据,在使用Double类型的数据时,涉及到精度,显示,四舍五入等等问题. 1.  显示问题,当double 数据 小于 0.0 ...

  6. IIS重叠回收

    在IIS应用程序池的高级设置中,有一个“禁用重叠回收”属性,默认值是False. 重叠回收(Overlapped Recycling),指的是当回收的时候,原来的进程继续处理正在处理的请求,同时一个新 ...

  7. webpack前端构建工具学习总结(二)之loader的使用

    Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换. Loader 可以理解为是模块和资源的转换器,它本身是一个函数,接受源文件作为 ...

  8. Netweaver和CloudFoundry里的trace开关

    Netweaver 事务码SU01的参数设置里,有很多关于trace(跟踪)的开关. FPTRACELEVEL: 设成04后,能将ADS生成PDF的trace信息写入生成的PDF. 详细原理参考我的b ...

  9. 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)

    点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...

  10. 【BZOJ3940】[USACO2015 Feb] Censoring (AC自动机的小应用)

    点此看题面 大致题意: 给你一个文本串和\(N\)个模式串,要你将每一个模式串从文本串中删去.(此题是[BZOJ3942][Usaco2015 Feb]Censoring的升级版) \(AC\)自动机 ...