1413: [ZJOI2009]取石子游戏

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 747  Solved: 490
[Submit][Status][Discuss]

Description

在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排。游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。 Orez问:对于任意给出一个初始一个局面,是否存在先手必胜策略。

Input

文件的第一行为一个整数T,表示有 T组测试数据。对于每组测试数据,第一行为一个整数n,表示有n堆石子;第二行为n个整数ai,依次表示每堆石子的数目。

Output

对于每组测试数据仅输出一个整数0或1。其中1表示有先手必胜策略,0表示没有。

Sample Input

1
4
3 1 9 4

Sample Output

0

数据范围
对于30%的数据 n≤5 ai≤105
对于100%的数据 T≤10 n≤1000 每堆的石子数目≤109

 

参考了这里的思路。可以发现对于任意一段[i,j],在其左边添上一个数,只有唯一的一个数(包括0即不添加)能够使新的序列[i-1,j]是一个必败状态。显然,如果有两个x,y都满足,不妨设x<y,那么对于y+[i,j]这个状态,可以把y取到x使其成为必败状态,这与每一个必败状态都转移不到必败状态矛盾。故得证。可知在右边添上一个数同理。

令l[i][j]表示[i,j]左边添上的数,r[i][j]表示右边添上的数。假设我们已经知道了x=l[i-1][j],y=r[i][j-1],z=a[j],那么:

1.特殊情况a[j]=y,那么[i,j]本身就是一个必败状态,l[i][j]=0;

2.如果a[j]<x,y,那么令l[i][j]=a[j],然后先手在一边取k个,后手就在另一边取k个。新手显然先取到了,那么此时还剩下的那一堆的数量显然<x,y,因此后手有必胜策略;

3.考虑x<=a[j]<y,那么令l[i][j]=a[j]+1,然后在第j堆个数>=x时,后手始终保持让第i-1堆得比第j堆得多一个;当第j堆个数<x时,后手始终保持第i-1堆和第j堆相同,然后同2;

4.考虑y<a[j]<=x,那么令l[i][j]=a[j]-1,然后同3;

5.考虑a[j]>x,y,那么令l[i][j]=a[j]。不妨设x<y(x>y同理),那么当第i-1堆个数>y时,后手保持第i-1堆和第j堆相同;然后同3;

最后,如果a[1]==l[2][n]则无解;反之有解。

 #include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define N 1007
using namespace std; int n,a[N],l[N][N],r[N][N]; int main()
{
int cas;scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
for (int i=;i<=n;i++)
l[i][i]=r[i][i]=a[i];
for (int i=n-;i>=;i--)
for (int j=i+;j<=n;j++)
{
int x=l[i][j-],y=r[i][j-],z=a[j];
if (z==y) l[i][j]=;
else if (z<x&&z<y||z>x&&z>y) l[i][j]=z;
else if (x>y) l[i][j]=z-;
else l[i][j]=z+;
x=r[i+][j],y=l[i+][j],z=a[i];
if (z==y) r[i][j]=;
else if (z<x&&z<y||z>x&&z>y) r[i][j]=z;
else if (x>y) r[i][j]=z-;
else r[i][j]=z+;
}
if (n==) printf("%d\n",);
else printf("%d\n",(a[]==l[][n])?:);
}
}

bzoj 1413 [ZJOI2009]取石子游戏的更多相关文章

  1. vijos 1557:bzoj:1413: [ZJOI2009]取石子游戏

    Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...

  2. 【刷题】BZOJ 1413 [ZJOI2009]取石子游戏

    Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...

  3. 【BZOJ1413】[ZJOI2009]取石子游戏(博弈论,动态规划)

    [BZOJ1413][ZJOI2009]取石子游戏(博弈论,动态规划) 题面 BZOJ 洛谷 题解 神仙题.jpg.\(ZJOI\)是真的神仙. 发现\(SG\)函数等东西完全找不到规律,无奈只能翻题 ...

  4. 【一本通提高博弈论】[ZJOI2009]取石子游戏

    [ZJOI2009]取石子游戏 题目描述 在研究过 Nim 游戏及各种变种之后,Orez 又发现了一种全新的取石子游戏,这个游戏是这样的: 有 n n n 堆石子,将这 n n n 堆石子摆成一排.游 ...

  5. bzoj1413 [ZJOI2009]取石子游戏

    Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...

  6. P2599 [ZJOI2009]取石子游戏 做题感想

    题目链接 前言 发现自己三岁时的题目都不会做. 我发现我真的是菜得真实. 正文 神仙构造,分讨题. 不敢说有构造,但是分讨我只服这道题. 看上去像是一个类似 \(Nim\) 游戏的变种,经过不断猜测结 ...

  7. [ZJOI2009]取石子游戏

    瞪了题解两三天,直接下转第二篇题解就康懂了 首先我们令 : \(L[i][j]\) 表示当前 \([i,j]\) 区间左侧放置 \(L[i,j]\) 数量的石子后先手必败 \(R[i][j]\) 表示 ...

  8. 洛谷P2599||bzoj1413 [ZJOI2009]取石子游戏

    bzoj1413 洛谷P2599 根本不会啊... 看题解吧 #include<cstdio> #include<algorithm> #include<cstring& ...

  9. 1874: [BeiJing2009 WinterCamp]取石子游戏 - BZOJ

    Description小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问 ...

随机推荐

  1. javascript:void(0)与#区别

    javascript:void(0)   鼠标点击时,不会跳转到其他页面,且停留在原地 #   鼠标点击时,不会跳转到其他页面,但会回到顶部

  2. C. Timofey and a tree 观察题 + dfs模拟

    http://codeforces.com/contest/764/problem/C 题意:在n个顶点中随便删除一个,然后分成若干个连通子图,要求这若干个连通子图的颜色都只有一种. 记得边是双向的, ...

  3. jsp中非空判断

    function中uname要和id的值相匹配,但是这样不专业,要显示我的专业性,我将使用document获得name的值来判断是否为空,应为这样是专业的写法,我要时刻记住我是专业的 <scri ...

  4. JS格式化工具(转)

    <html> <head> <title>JS格式化工具 </title> <meta http-equiv="content-type ...

  5. Android 使用Bitmap将自身保存为文件,BitmapFactory从File中解析图片并防止OOM

    1.使用Bitmap将自身保存为文件 public boolean saveBitmapAsFile(String name, Bitmap bitmap) { File saveFile = new ...

  6. 总结几点sql语句优化

    一.表设计阶段: 1.主键的使用    a.业务日志表.安全审计表采用自增长:    b.自定义编号用于业务流程类表,根据一定的编号规则:    c.int型主键 用于基础数据表: 2.逻辑删除字段的 ...

  7. 迅为I.MX6开发板工业级嵌入式开发平台

    迅为-i.MX6开发板是是基于ARM Cortex™-A9架构的高扩展性多核系列应用处理器, i.MX6系列芯片而且根据应用场合的不同,提供了可供选择的单核.双核和四核产品供客户选择.i.MX6系列的 ...

  8. 去除inline-block间距

    去除inline-block间距 通过display:inline-block设置元素为水平时,相邻元素之间会有几px的间距: html: <ul class="list"& ...

  9. Windows文件自删除的两种方法

    可执行模块的自删除技术已经被讨论的很多, 有很多极富创意的思路和想法被提出, 但有些似是而非的方案往往使人误入歧途. 举个例子来说, 很多文章认为下面的一小段代码可以实现自删除:void main(v ...

  10. ubuntu12.04 配置apache+modwsgi+django1.5

    1.首先下载modwsgi  链接如下: http://files.cnblogs.com/baoyiluo/mod_wsgi-3.4.zip 2.解压并安装mod_wsgi: ./configure ...