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

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<set>
  4.  
  5. using namespace std;
  6. int c,z,n,p,T;
  7. int sg[];
  8.  
  9. int get_SG(int x) {
  10. if (sg[x]!=-) return sg[x];
  11. set<int>s;
  12. for (int i=; i<=(x-c); ++i) //枚举左边的长度
  13. s.insert(get_SG(i)^get_SG(x-i-c));
  14. for (int i=; i<=(x-z); ++i)
  15. s.insert(get_SG(i)^get_SG(x-i-z));
  16. for (int i=; i<=(x-n); ++i)
  17. s.insert(get_SG(i)^get_SG(x-i-n));
  18. for (int j=; ; ++j)
  19. if (!s.count(j)) {sg[x]=j;break;}
  20. return sg[x];
  21. }
  22. int main () {
  23. memset(sg,-,sizeof(sg));
  24. sg[] = ;
  25. scanf("%d%d%d%d",&c,&z,&n,&T);
  26. while (T--) {
  27. scanf("%d",&p);
  28. if (get_SG(p)==) puts("");
  29. else puts("");
  30. }
  31. return ;
  32. }

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

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<set>
  4.  
  5. using namespace std;
  6. int c,z,n,p,T;
  7. int sg[][];
  8.  
  9. int get_SG(int l,int r) {
  10. if (l > r) return ;
  11. if (sg[l][r]!=-) return sg[l][r];
  12. set<int>s;
  13. for (int i=l; i<=(r-c+); ++i)
  14. s.insert(get_SG(l,i-)^get_SG(i+c,r));
  15. for (int i=l; i<=(r-z+); ++i)
  16. s.insert(get_SG(l,i-)^get_SG(i+z,r));
  17. for (int i=l; i<=(r-n+); ++i)
  18. s.insert(get_SG(l,i-)^get_SG(i+n,r));
  19. for (int j=; ; ++j)
  20. if (!s.count(j)) {sg[l][r]=j;break;}
  21. return sg[l][r];
  22. }
  23. int main () {
  24. memset(sg,-,sizeof(sg));
  25. sg[][] = ;
  26. scanf("%d%d%d%d",&c,&z,&n,&T);
  27. while (T--) {
  28. scanf("%d",&p);
  29. if (get_SG(,p)==) puts("");
  30. else puts("");
  31. }
  32. return ;
  33. }

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. 返回mapcontrol上的已被选择的element

     IGraphicsContainerSelect.SelectedElement

  2. 在Ubuntu环境下配置NIMH MEG Core Facility之CTF Tools

    在Ubuntu环境下配置NIMH MEG Core Facility之CTF Tools 网站有提示: The install script won't work, but you can copy ...

  3. Spring @Autowired使用介绍

    参考博客: https://blog.csdn.net/u013412772/article/details/73741710 引用文章地址: https://my.oschina.net/Helio ...

  4. javascript HTML静态页面传值的四种方法

    一:JavaScript静态页面值传递之URL篇能过URL进行传值.把要传递的信息接在URL上.Post.htm 代码如下: <input type="text" name= ...

  5. hihoCoder hiho一下 第二周 #1014 : Trie树(Trie树基本应用)

    思路: 完全看题目中的介绍就行了.还有里面的input写道:不保证是英文单词,也有可能是火星文单词哦.比赛结束后的提交是不用考虑26个字母之外的,都会AC,如果考虑128种可能的话,爆了内存.步骤就是 ...

  6. IOS Window窗口使用

    // 程序启动完毕之后就会调用一次 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NS ...

  7. softmax 函数

    总结为:   将一组数变换为  总和为1,各个数为0~1之间的软性归一化结果. ========================================================= 关于 ...

  8. SpringBoot学习记录(二)

    一. SpringBoot日志框架 SpringBoot:底层是Spring框架,Spring框架默认是用JCL(commons-logging): SpringBoot选用SLF4j和logback ...

  9. Ajax的学习记录

    Ajax学习笔记 1.同步与异步同步:客户端发送请求到服务端,当服务器返回响应之前,客户端都处于等待卡死状态异步:客户端发送请求到服务端,当服务器返回响应之前,客户端可以随意做其他事情,不会卡死 2. ...

  10. CSS清除浮动方法总结

    什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高 ...