【BZOJ2940】条纹(博弈论)

题面

BZOJ

神TM权限题。

题解

我们把题目看成取石子的话,题目就变成了这样:

有一堆\(m\)个石头,每次可以取走\(c,z,n\)个,每次取完之后可以把当前这堆剩下的石头分成任意数量的两堆(可以为空),不能操作者输,判定胜负。

那么这就是一个比较简单的\(Multi-SG\)了,直接预处理\(SG\)函数即可。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define MAX 1010
  10. inline int read()
  11. {
  12. int x=0;bool t=false;char ch=getchar();
  13. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  14. if(ch=='-')t=true,ch=getchar();
  15. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  16. return t?-x:x;
  17. }
  18. int c,z,n,m,SG[MAX];
  19. bool vis[MAX];
  20. int main()
  21. {
  22. c=read(),z=read(),n=read();
  23. for(int i=1;i<=1000;++i)
  24. {
  25. memset(vis,0,sizeof(vis));
  26. if(i>=c)
  27. for(int j=0;j<=i-c;++j)
  28. vis[SG[j]^SG[i-c-j]]=true;
  29. if(i>=z)
  30. for(int j=0;j<=i-z;++j)
  31. vis[SG[j]^SG[i-z-j]]=true;
  32. if(i>=n)
  33. for(int j=0;j<=i-n;++j)
  34. vis[SG[j]^SG[i-n-j]]=true;
  35. for(int j=0;;++j)if(!vis[j]){SG[i]=j;break;}
  36. }
  37. m=read();while(m--)puts(SG[read()]?"1":"2");
  38. return 0;
  39. }

【BZOJ2940】条纹(博弈论)的更多相关文章

  1. BZOJ2940 条纹

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

  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】【2940】【POI2000】条纹

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

  5. IT人生知识分享:博弈论的理性思维

    背景: 昨天看了<最强大脑>,由于节目比较有争议性,不知为什么,作为一名感性的人,就想试一下如果自己理性分析会是怎样的呢? 过程是这样的: 中国队(3人)VS英国队(4人). 1:李建东( ...

  6. [poj2348]Euclid's Game(博弈论+gcd)

    Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9033   Accepted: 3695 Des ...

  7. 用css实现条纹背景

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

  8. 博弈论揭示了深度学习的未来(译自:Game Theory Reveals the Future of Deep Learning)

    Game Theory Reveals the Future of Deep Learning Carlos E. Perez Deep Learning Patterns, Methodology ...

  9. TYVJ博弈论

    一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140  飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...

随机推荐

  1. python实现满二叉树递归循环

    一.二叉树介绍点这片文章 二叉树及题目介绍 例题: 有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下, 小球每次经过开关就会把它的状态置反,这个开关为关时,小球左跑,为开时右跑.现在 ...

  2. ES5中文分词(IK)

    ElasticSearch5中文分词(IK) ElasticSearch安装 官网:https://www.elastic.co 1.ElasticSearch安装 1.1.下载安装公共密钥 rpm ...

  3. 50分钟学会Laravel 50个小技巧(基于laravel5.2,仅供参考)

    转载请注明:转载自 Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 50分钟学会Laravel 50个小技巧 原文链接:< 50 Laravel Tricks in 50 Mi ...

  4. WPF实现Windows资源管理器(附源码)

      今天我来写一篇关于利用WPF来实现Windows的资源管理器功能,当然只是局部实现这个功能,因为在很多时候我们需要来实现对本机资源的管理,当然我们可以使用OpenFileDialog dialog ...

  5. mysql对身份证号码进行脱敏处理

    select * from test 格式:INSERT(str,pos,len,newstr) 解释: str:查询的例 pos:起始位置 len:从起始位置开始被后面newstr替换的长度 new ...

  6. DBExpress动态连接SQL-Server

    procedure TForm1.Button1Click(Sender: TObject);var  theCNN : TSQLConnection;//定义连接,要引用 DB, SqlExprbe ...

  7. vue实例相关2

    vue data中 对象/数组 不为空,即使定义为[]/{} new Vue({ el: '#main', data: { list: [], current: {}, aa:'' } }) cons ...

  8. Coalesce (MS SQL Server)——取指定内容(列)中第一个不为空的值

    oalesce 获得参数中第一个不为空的表达式. 语法:        COALESCE ( expression [ ,...n ] ) 例子:CREATE TABLE wages          ...

  9. 学习 Spring (五) Aware 接口

    Spring入门篇 学习笔记 Spring 中提供了一些以 Aware 结尾的接口,实现了 Aware 接口的 bean 在被初始化之后可以获取相应资源 通过 Aware 接口,可以对 Spring ...

  10. Jenkins: 1.x升级到2.x

    停止Jenkins Service 用2.x的"jenkins.war"替换安装目录下的"jenkins.war" 启动Jenkins Service 打开je ...