吃糖果游戏(tyvj 1567)
tyvj 1567:
博弈,题目给的数据是不超过1000位,所以这题应该找规律求解。
我是将30以内的sg值值求出来,然后规律就很容易看出来啦。
求sg值:
#include <stdio.h>
#include <string.h>int sg[100][100];int getsg(int x, int y)
{int i;if(sg[x][y] != -1)return sg[x][y];bool vis[100];memset(vis, 0, sizeof(vis));for(i = 1; i < x; i++)vis[getsg(x - i, i)] = 1;for(i = 1; i < y; i++) vis[getsg(y - i, i)] = 1;for(i = 0; i < 100; i++)if(vis[i] == 0)break;return sg[x][y] = sg[y][x] = i;
}int main (void)
{memset(sg, -1, sizeof(sg));int i, j;for(i = 0; i < 100; i++)sg[1][i] = sg[i][1] = 1;for(i = 1; i <= 30; i ++)for(j = 1; j <= 10; j++)getsg(i, j);//getsg(20, 20);//开始这样写,但是结果不对for(i = 1; i <= 30; i ++){for(j = 1; j <= 10; j++){if(sg[i][j] != 0)printf("1 ");elseprintf("0 ");}printf("\n");}return 0;
}
打出来的结果:
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
恩 除此之外还有一种思考方式,可以直接找到规律,上面sg函数是以二维来思考的,我们也可以换作一维,那么n,就代表已经将其中一堆吃完,剩下那一堆将要被分割的糖果数是n。
当n = 1时,先手胜。
当n = 2,因为只能分成(1, 1)(胜, 胜), 所以2是必败的。
当n = 3,可以分成(2, 1)(败, 胜),那么后手在面对(2, 1)这个状态的时候肯定是吃掉2这堆,留下1这堆,因为通过前面的分析知道分割1可以保证胜利,这样后手就会赢,所以3是必败的。
当n = 4时, 可以分成(2, 2)(败, 败), (1, 3)(胜, 败),先手肯定要将两个必败态留给对手,所以肯定会选择分成(2, 2)。
当n = 5时, 可以分成(2, 3)(败, 败), (1, 4)(胜, 胜), 先手选择分成(2, 3)保证对手输。
也就是说如果n的后继状态中有一种分法(a, b),其中a和b都是必败的,那么n是必胜的,否则必败。
………………
推个20或者30的应该就可以看出规律:
1 2 3 4 5 6 7 8 9 10
1 0 0 1 1 1 0 0 1 1
11 12 13 14 15 16 17 18 19 20
1 0 0 1 1 1 0 0 1 1
(做题的时候如果头脑清楚思维敏捷,这应该也是不错的方法,但是感觉就是不太适合我_(:з」∠)_)
找到规律就很好写了~
#include <stdio.h>
#include <string.h>char a[10010], b[10010];int yes(char x)
{if(x == '1' || x == '4' || x == '5' || x == '6' || x == '9' || x == '10')return 1;return 0;
}int f(char x)
{if(x == '2' || x == '3' || x == '7' || x == '8')return 0;return 1;
}int main (void)
{while(scanf("%s %s", a, b) != EOF){//只要判断最后一位 int len1 = strlen(a), len2 = strlen(b);if(yes(a[len1 - 1]) || yes(b[len2 - 1]))printf("Matrix67\n");else{if(f(b[len2 - 1]) || f(a[len1 - 1]))printf("Matrix67\n");elseprintf("Shadow\n"); }}return 0;
}
吃糖果游戏(tyvj 1567)相关推荐
- P1567 吃糖果游戏
原题: 描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并 ...
- vijos1196|吃糖果游戏|博弈论
描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆( ...
- Vijos P1196吃糖果游戏[组合游戏]
描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆( ...
- vijos1196吃糖果游戏
描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆( ...
- Phaser.js开发-怪物吃糖果
什么是怪物要糖果? 当我开始制作游戏,首先确定核心玩法,并尝试迅速建立了一个游戏原型.在这个案例中,我们从一个相当简单的演示 发展出来的游戏名字叫 怪物要糖果 . 首先我会告诉你项目的结构,所以你可以 ...
- 吃豆豆游戏的C语言程序码,C++实现基于控制台界面的吃豆子游戏
本文实例讲述了C++实现基于控制台界面的吃豆子游戏.分享给大家供大家参考.具体分析如下: 程序运行界面如下所示: ESC键可退出游戏. main.cpp源文件如下: #include "li ...
- 手机吞吃蛇游戏的设计与开发
为什么80%的码农都做不了架构师?>>> J2ME(Java 2 Micro Edition) 是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术. ...
- 信息学奥赛一本通 1193:吃糖果 | OpenJudge NOI 2.6 1944:吃糖果
[题目链接] OpenJudge NOI 2.6 1944:吃糖果 注:ybt 1193:吃糖果 页面打不开,可以在OpenJudge做该题. [题目考点] 1. 递推/递归 2. 搜索 [解题思路] ...
- 信息学奥赛一本通 2069:【例2.12】糖果游戏
[题目链接] ybt 2069:[例2.12 ]糖果游戏 [题目考点] 1. 复合赋值表达式 表格中两列对应写法是等价的 写法1 写法2 a = a + b a += b a = a - b a -= ...
最新文章
- linux 常用快捷键
- 计算机视觉:基于眼疾分类数据集iChallenge-PM图像分类经典模型剖析(LeNet,AlexNet,VGG,GoogLeNet,ResNet)
- switch语句可以被代替吗_大空间建筑内的消防水炮可以代替喷淋装置吗
- JavaFX之TableView
- leetcode —— 938. 二叉搜索树的范围和
- 了解计算机中的信息编码教案,五年级下册信息技术《奇妙的编码》教学设计
- 基于JAVA+Servlet+JSP+MYSQL的中小型财务管理系统
- Python【WINAPI】钩子程序获取账号密码等键盘输入信息
- 851. 喧闹和富有
- Redis实战(十三)Redis的三种集群方式
- JavaScript匿名函数和回调函数
- atitit.常用编程语言的性能比较 c c++ java
- linux vim yy,linux vim的使用方法
- html页面上传图片回显,html js 上传图片并回显
- 按搜索量排名前100位访问量最高的网站(截至2020年)
- 2022年全球及中国多功能压力锅市场份额预测与投资竞争格局调查报告
- php文件是不是死链,怎么判断网站的链接是不是死链接? 百度搜索标准死链官方文档...
- php(magento),magento在本地php7上安装方法
- 浅谈虚拟机的垃圾回收
- 区块链究竟是如何工作的?
热门文章
- 【PS/AI】2021新年金色装饰背景矢量素材
- 文本聚类算法Java实现
- python - ffmpeg和moviepy:gif 转mp4
- nginx配置详解(容器、负载)—官方原版
- (SSM解析错误)$%7BpageContext.request.contextPath%7D/account/save
- 相机标定-opencv单应性矩阵实现平面坐标标定(kinect v1)
- 电脑新加内存条后 游戏崩溃 浏览器卡死 电脑蓝屏
- 详解:一次HTTP请求的全过程
- 用户访问我计算机不用凭据,如何进行凭据管理实现自动登录网络
- js可以打开mat文件吗_企业微信最大可以传多大文件?企业微信发送文件有限制吗?...