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. wcf_消息通信模式(下) 双工通讯

    原文:[老老实实学WCF] 第十篇 消息通信模式(下) 双工 第十篇 消息通信模式(下) 双工 在前一篇的学习中,我们了解了单向和请求/应答这两种消息通信模式.我们知道可以通过配置操作协定的IsOne ...

  2. 常见的生成全局唯一id有哪些?他们各有什么优缺点?

    分布式系统中全局唯一id是我们经常用到的,生成全局id方法由很多,我们选择的时候也比较纠结.每种方式都有各自的使用场景,如果我们熟悉各种方式及优缺点,使用的时候才会更方便.下面我们就一起来看一下常见的 ...

  3. 做一个vue模态弹出框如何

    运用的知识点包括: 路由的配置 插槽 vue的过渡动画 路由重定向 router/index.js里面配置路由 import Vue from 'vue' import Router from 'vu ...

  4. 多个图标图片(雪碧图)使用CSS样式显示

    现在的网页中显示很多图标算是常态,发现项目中页面上用到的图标都是单个图标单个文件,用的时候直接往页面上挂,这确实很常态. 如果,网站是挂在外网上,或者网速过低,又大量使用图标的情况下,由于浏览器和服务 ...

  5. 配置Ubuntu DNS

    首先,你可以在/etc/hosts中加入一些主机名称和这些主机名称对应的IP地址,这是简单使用本机的静态查询.要访问Ubuntu DNS 服务器来进行查询,需要设置/etc/resolv.conf文件 ...

  6. String和string

    String和string的区别 从位置讲:         1.String是.NET   Framework里面的String,小写的string是C#语言中的string 2.如果把using ...

  7. 腾讯云服务器CVM购买详细过程 选择我们需要的腾讯云服务器

    腾讯云服务商有云服务器.云数据库.CDN.云存储等产品,其中较多的用户会选择腾讯云服务器,因为用途比较广泛,比如用来软件的运行以及网站建设,如今一般都是用云服务器,而不是用虚拟主机,毕竟虚拟主机的性价 ...

  8. Shell脚本 - 用来检查memcache并自动重启生效脚本

    #!/bin/sh#check memcache process and restart if downmm_bin="/usr/local/bin/memcached"mm_lo ...

  9. Processing入门指南

    简介 Processing 是由 MIT 媒体实验室的 Casey Reas 和 Benjamin Fry 发明的一种开源可视化编程语言.Processing为数字媒体与娱乐交互设计而创建,其目的是通 ...

  10. python_48_Python3中字符编码与转码

    python3默认是Unicode,不用声明# -*- coding:utf-8 -*-,如果声明则是utf-8 unicode='你好' print('utf-8:',unicode.encode( ...