环上的游戏

环上的游戏(cycle)
有一个取数的游戏。初始时,给出一个环,环上的每条边上都有一个非负整数。这些整数中至少有一个0。然后,将一枚硬币放在环上的一个节点上。两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流取数,取数的规则如下:
(1)选择硬币左边或者右边的一条边,并且边上的数非0;
(2)将这条边上的数减至任意一个非负整数(至少要有所减小);
(3)将硬币移至边的另一端。
如果轮到一个玩家走,这时硬币左右两边的边上的数值都是0,那么这个玩家就输了。
如下图,描述的是Alice和Bob两人的对弈过程,其中黑色节点表示硬币所在节点。结果图(d)中,轮到Bob走时,硬币两边的边上都是0,所以Alcie获胜。

 


现在,你的任务就是根据给出的环、边上的数值以及起点(硬币所在位置),判断先走方是否有必胜的策略。
【输入格式】
第一行一个整数N(N≤20),表示环上的节点数。
第二行N个数,数值不超过30,依次表示N条边上的数值。硬币的起始位置在第一条边与最后一条边之间的节点上。
【输出格式】
仅一行。若存在必胜策略,则输出“YES”,否则输出“NO”。
【样例】
cycle1.in
4
2 5 3 0
cycle1.out
YES

cycle2.in
3
0 0 0
cycle2.out
NO

最后取到数的人获胜

解:首先根据题意分析可得假使走过一条边那么每次将它一点点减小到0

和一次性将它减小到0是一样的,那么不妨每走过一条边,就将边上的数值

减为0;

数据范围n<=20

那么我们可以搜索所有的可行路线,

(相当于剪枝)一旦存在先手赢的做法,就返回

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<string>
 7 using namespace std;
 8 int n,a[30];
 9 int L(int x)
10 {
11     int p=(x-1+n)%n;
12     if(p==0) p=n;
13     return p;
14 }
15 int R(int x)
16 {
17     int p=(x+1+n)%n;
18     if(p==0) p=n;
19     return p;
20 }
21 bool fg;
22 //1 Alice 2 Bob
23 void dfs(int nw,int peo)
24 {
25 //    cout<<"uu "<<nw<<" "<<peo<<endl;
26     if(fg) return;
27     if(a[nw]==0 && a[L(nw)]==0)
28     {
29        if(peo==2) fg=1; 
30        return;
31     }
32     if(a[nw])
33     {
34         int tmp=a[nw];a[nw]=0;
35         dfs(R(nw),3-peo);
36         a[nw]=tmp;
37     }
38     if(a[L(nw)])
39     {
40         int tmp=a[L(nw)];a[L(nw)]=0;
41         dfs(L(nw),3-peo);
42         a[L(nw)]=tmp;
43     }
44 }
45 int main()
46 {
47     freopen("cycle.in","r",stdin);
48     freopen("cycle.out","w",stdout);
49     scanf("%d",&n);
50     for(int i=1;i<=n;++i) scanf("%d",&a[i]);
51     dfs(1,1);
52 //    for(int i=1;i<=n;++i)
53 //     cout<<i<<" PPP "<<L(i)<<" "<<R(i)<<endl;
54     if(fg) printf("YES");
55     else printf("NO");
56     return 0;
57 }//数据范围小,搜索 
代码

 

转载于:https://www.cnblogs.com/adelalove/p/9096908.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础课程_2学习笔记3:图形用户界面

图形用户界面 丰富的平台 写作Python GUI程序前&#xff0c;须要决定使用哪个GUI平台。 简单来说&#xff0c;平台是图形组件的一个特定集合。能够通过叫做GUI工具包的给定Python模块进行訪问。工具包 描写叙述 Tkinter 使用Tk平台。非常easy得到。半标准。 wxpython 基于…

idea ssm打war包_IDEA下从零开始搭建SpringBoot工程

SpringBoot的具体介绍可以参看其他网上介绍&#xff0c;这里就不多说了&#xff0c;就这几天的学习&#xff0c;个人理解&#xff0c;简而言之&#xff1a;如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring&#xff0c;MyBatis&#xff0c;Netty源码分析的朋友…

dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]

数理统计&#xff1a;数理统计是以概率论为基础&#xff0c;研究社会和自然界中大量随机现象数量变化基本规律的一种方法。分为&#xff1a;描述统计(描述统计的任务是搜集资料&#xff0c;进行整理、分组&#xff0c;编制次数分配表&#xff0c;绘制次数分配曲线&#xff0c;计…

c语言高级语言期中测试答案,上海理工大学C语言2011期中试题和答案

C语言2010/2011学年 第二学期 期中测试高级语言程序设计(C)试卷 A □BA1. 输入一行字符&#xff0c;统计其中的英文字母个数。#include void main(){ char ch;int n0;printf(“Input a string:\n”);while(1){ chgetchar();if (ch \n ) break;if (ch> a && ch< z…

如何构建ASP.NET MVC4JQueryAJaxJSon示例

背景&#xff1a; 博客中将构建一个小示例&#xff0c;用于演示在ASP.NET MVC4项目中&#xff0c;如何使用JQuery Ajax。 直接查看JSon部分 步骤&#xff1a; 1&#xff0c;添加控制器(HomeController)和动作方法(Index),并为Index动作方法添加视图(Index.cshtml),视图中HTML如…

echarts 有引导线和内部文字_点、线、面构图的异同以及相互转化

点、线、面构图既有相似性&#xff0c;又有差异性。相似的是都有对齐、强调、群组、重复、突出层次的作用&#xff0c;不同的是点的特点是聚焦、线的特点是运动和方向性&#xff0c;面的特性是体量感、稳定性。点的情感最弱&#xff0c;线、面的情感要比点丰富。一、点、线、面…

《Python黑帽子:黑客与渗透测试编程之道》 Web攻击

Web的套接字函数库&#xff1a;urllib2 一开始以urllib2.py命名脚本&#xff0c;在Sublime Text中运行会出错&#xff0c;纠错后发现是重名了&#xff0c;改过来就好&#xff1a; #!/usr/bin/python #codingutf-8 import urllib2url "http://www.baidu.com"headers …

vCenter Converter Standalone使用文档

文档目的能够使用vCenter Converter Standalone 将物理机操作系统迁移到虚拟机操作系统基础知识vCenter Converter Standalone 能将物理机上的操作系统、VMware虚拟机上的操作系统或者Hype-V 上的虚拟机操作系统迁移到VMware上。系统环境操作系统&#xff1a;Windows Server 20…

1093芯片做正弦波逆变器_正弦波逆变器中的SPWM调制(钟任生)

欢迎加入技术交流QQ群(2000人)&#xff1a;电力电子技术与新能源 905723370高可靠新能源行业顶尖自媒体在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验&#xff0c;欢迎关注我们&#xff0c;搜索微信公众号&#xff1a;电力电子技术…

android 手机短信恢复,安卓手机短信删除了怎么恢复?简单恢复的方法

原标题&#xff1a;安卓手机短信删除了怎么恢复&#xff1f;简单恢复的方法安卓手机短信删除了怎么恢复&#xff1f;手机短信是生活中不经常使用到&#xff0c;但是依然是十分重要的存在&#xff0c;因为我们现在比较喜欢用社交软件与别人进行交流&#xff0c;但是在一些相对重…

bash下个人习惯的一些文件设置

2019独角兽企业重金招聘Python工程师标准>>> bash_profile export PATH/usr/local/bin:$PATH export EDITORviinputrc set editing-mode vi #set editing-mode emacs set show-all-if-ambiguous on set completion-ignore-case on set meta-flag on set conver…

docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

一、前言1、本文主要内容将在项目中实际使用到的相关东西整理记录一波&#xff0c;同时可以方便其他同学在使用到的时候参考一下(自己也备忘)&#xff0c;有不对的地方&#xff0c;欢迎指出~~Docker部署SpringBoot 项目通用Dockerfile文件、脚本Jenkins新建任务图文详解3、本文…

android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

在开发android应用程序时&#xff0c;有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应。譬如编写一个广播接收器&#xff0c;来提示用户有短信收到或者处理短信&#xff0c;就需要向该手机发送短信来进行测试。这里介绍一种简单的向android模拟器打电话发短…

android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究

在android中&#xff0c;常常会和输入法的软件键盘交互。在Manifest文件中&#xff0c;系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式。该属性提供了Activity的window与软键盘的window交互的方式。这里的属性设置有双方面的影响&#xff1a;1.软键盘的显…

天才基本法_《天才基本法》强推!年度神仙小说,看完这本书我竟然爱上了数学...

《天才基本法》——长洱小说文案元宝的书评这个真的是本年度的神仙小说&#xff0c;讲述了女主回到少女时代&#xff0c;可以和他一直暗恋的数学天才重来一遍。女主让男主改变了觉得她碌碌无为的看法&#xff0c;也改变了自己的人生。本书最大的主角其实是数学&#xff01;天知…

千年鸿蒙 盼尔来兮是什么意思,鸿蒙是什么意思_鸿蒙的意思和出处_我爱历史网...

鸿蒙&#xff0c;是一个汉语词语&#xff0c;亦作“鸿濛”。中国神话传说的远古时代&#xff0c;传说在盘古开天辟地之前&#xff0c;世界是一团混沌状&#xff0c;因此把那个时代称作鸿蒙时代&#xff0c;后来该词也常被用来泛指远古时代。引证解释亦作“鸿濛”。1、宇宙形成前…

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

from:http://m.blog.csdn.net/article/details?id51075023 在VS2015中先创建C#项目&#xff0c;然后再创建要编写的动态库DLL项目&#xff0c;这样做的好处是整个解决方案的编程环境是C#模式&#xff0c;这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用…

(转)CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景 我们刚刚分析了《极限跳跃》这款游戏&#xff0c;下面我们开始制作第一个游戏场景&#xff0c;也就是游戏的开始场景。 首先&#xff0c;打开CocosCreator&#xff0c;新建HelloWorld项目。选择项目路径&#xff0…

连接池超时配置_HttpClient连接池的一些思考

前言使用apache的httpclient进行http的交互处理已经很长时间了&#xff0c;而httpclient实例则使用了http连接池&#xff0c;想必大家也没有关心过连接池的管理。事实上&#xff0c;通过分析httpclient源码&#xff0c;发现它很优雅地隐藏了所有的连接池管理细节&#xff0c;开…

视图和模型变换

视图变换&#xff0c;是指变换照相机的位置&#xff0c;角度。 模型变换&#xff0c;是指变换被照物体的位置&#xff0c;角度。 这两个变换&#xff0c;都会影响最终图形中&#xff0c;物体的位置&#xff0c;角度。而这两个变换&#xff0c;可以达到相同的效果。比如&#x…