历届试题 高僧斗法  (博弈)

2023-10-29

 题目:

  历届试题 高僧斗法  

时间限制:1.0s   内存限制:256.0MB

      

锦囊1

博弈论,NIM取子游戏。

锦囊2

将两个两个看成一组,他们之间的间隔可以看成一个NIM取子游戏。

问题描述

  古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛。
  节目大略步骤为:先用粮食(一般是稻米)在地上“画”出若干级台阶(表示N级浮屠)。又有若干小和尚随机地“站”在某个台阶上。最高一级台阶必须站人,其它任意。(如图1所示)
  两位参加游戏的法师分别指挥某个小和尚向上走任意多级的台阶,但会被站在高级台阶上的小和尚阻挡,不能越过。两个小和尚也不能站在同一台阶,也不能向低级台阶移动。
  两法师轮流发出指令,最后所有小和尚必然会都挤在高段台阶,再也不能向上移动。轮到哪个法师指挥时无法继续移动,则游戏结束,该法师认输。
  对于已知的台阶数和小和尚的分布位置,请你计算先发指令的法师该如何决策才能保证胜出。

输入格式

  输入数据为一行用空格分开的N个整数,表示小和尚的位置。台阶序号从1算起,所以最后一个小和尚的位置即是台阶的总数。(N<100, 台阶总数<1000)

输出格式

  输出为一行用空格分开的两个整数: A B, 表示把A位置的小和尚移动到B位置。若有多个解,输出A值较小的解,若无解则输出-1。

样例输入

1 5 9

样例输出

1 4

样例输入

1 5 8 10

样例输出

1 3

 其他类似题目分析:

Nim游戏(取石子)

阶梯尼姆游戏

 

 分析:

  • 注意他与阶梯尼姆游戏不同的细节是它的最后一个小和尚在最后一个阶梯上,所以我们就可以,直接从第一个开始算间隔点,从而不用分是否为技术两种情况
  • 当移动的时候有两种情况,一种为左和尚向右移动,间隔变小,另一种为右和尚向右移动,间隔变大,当然还要注意边界情况
/**
*@author yangyvting
*@date 2019年5月7日
*/
package 高僧斗法;
//100分
import java.util.Scanner;

public class Main {
    static int a[] = new int[100];
    //static int a[] = {1, 5 ,8,10};
	static int b[];
	static int n = 0;

	public static void main(String[] args) {
         Scanner sca = new Scanner(System.in);
         while(sca.hasNext()) {
        	 a[n ++] = sca.nextInt();
         }
         
	//	n  = a.length ;
		b = new int[n/2];
		
		//由于最后一个小和尚站在最后一个台阶,所以从第一个小和尚开始,当小和尚只有奇数个的时候可以去掉这个小和尚,当有偶数个的时候可以将最后一个考虑进去
		int res = 0;
		for(int i = 0; i < n - 1; i = i + 2) {
			b[i/2] = a[i + 1] - a[i] - 1;
			res ^= b[i/2];
		}
		
		if(res == 0) {
			System.out.println("-1");
		}
		else {
			Nim();
		}
	}

	private static void Nim() {
		
		for(int i = 0; i < n - 1; i = i + 2) {
			int res = 0;
			//1 计算除去该段的其他的段的异或结果
			for(int j = 0; j < n/2; j ++) {
				if(j != i / 2) {
					res ^= b[j];
				}				
			}
			
			//2 求出是否由复合要求的移动方法
			for(int j = a[i] + 1; j < a[i + 1]; j ++) {
				int t = a[i + 1] - j - 1;
				 
				if((t ^ res) == 0) {
					System.out.println(a[i] + " " + j);
					return;
				}
			}
			if(i < n - 2) {
				for(int j = a[i + 1] + 1; j < a[i + 2]; j ++) {
					int t = j - a[i] - 1;
				 
					if((t ^ res) == 0) {
						System.out.println(a[i + 1] + " " + j);
						return;
					}
				}
			}
		}
	}

}

样例:

5 9 15 

运行结果:

5 8

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

历届试题 高僧斗法  (博弈) 的相关文章

  • python判断某一字符是否在字符串中的函数_Python实现判断字符串中包含某个字符的判断函数示例...

    Python实现判断字符串中包含某个字符的判断函数示例 本文实例讲述了Python实现判断字符串中包含某个字符的判断函数 分享给大家供大家参考 具体如下 coding utf8 参数包含两个 containVar 查找包含的字符 strin
  • 【声音

    gbcax链交所 声音 众鼎集团董事长张哲仁 目前应专注区块链赋能实体经济 众鼎集团董事长张哲仁在第十二届上海金洽会之首届区块链论坛上表示 现在只有将发展重心聚焦应用场景落地 专注区块链赋能实体经济 才是未来区块链的正确发展方向
  • 医学成像中的深度学习——基于PyTorch的3D 医学图像分割

    深度学习和医学成像 计算机视觉领域深度网络的兴起为经典图像处理技术表现不佳的问题提供了最先进的解决方案 在图像识别的广义任务中 包括目标检测 图像分类和分割 活动识别 光流和姿态估计等问题 我们可以很容易地声称 DNN 深度神经网络 取得了
  • npm login 时报错npm ERR! code E403

    npm ERR code E403 npm ERR 403 403 Forbidden PUT https registry npmmirror com user org couchdb user jieyucx FORBIDDEN Pub
  • C++14后如何读入一行带空格的一行字符串

    前文 在c 11标准及之前 仍可以使用gets读入 但是c 14正式删除了gets这一不安全的读入 由于读入对空格的自动忽略 所以需要其他读入函数来处理带空格的字符串 具体读入方式 一 字符数组 A std cin getline str
  • linux中shell脚本手动执行没问题,crontab定时执行失败

    问题描述 Shell脚本手动执行可以正常运行 并得到正确结果 使用Crontab定时调度的时候 Shell脚本执行出来的结果数据量为0 原因 Linux下用crontab执行定时任务不会缺省的从用户profile文件中读取环境变量参数 所以
  • 区块链原理通俗说明

    通俗讲解区块链 区块链是一个记录数据的一个共享数据库 具有 不可伪造 全程留痕 可以追溯 公开透明 集体维护 等特征 根据其具体实现的差异可以实现不同的功能 例如数字货币 Bitcoin 智能合约等 例子 转载 白话区块链 早些时候 农村一
  • jira 安装注意事项

    1 邮件配置 2 破解时 先注册一个jira账户 申请一个试用密钥
  • 分配学号 Python123

    描述 附件中学院代码和专业代码文件中的数据是每个学院的编号和专业的编号 学生名单文件中有若干学生信息 学生出现的顺序是他在班级中排名顺序 每行中的数据用逗号分隔 各数据依顺代表
  • 谷粒商城-基础篇-商品服务2-品牌管理(P59-P69)+(P75)

    目录 一 商品服务 API 品牌管理 1 使用逆向工程的前后端代码 2 效果优化及显示开关 3 云存储开通与使用 1 阿里云对象存储oss 2 oss整合测试 3 SpringCloud Alibaba 4 创建第三方模块 并完成添加上传功
  • Error in created hook (Promise/async): “AxiosError: Request failed with status code 404“

    背景 Error in created hook Promise async AxiosError Request failed with status code 404 原因 路径不对导致报错 解决方法 检查获取接口的代码 是否有空格
  • Github上1.1KFork的C++笔记

    编程语言 C C 原文链接 如果觉得本文对你有所帮助 欢迎去原地址点个Star 侵删 https github com linw7 Skill Tre 目录 Chapter 1 Chapter 2 Chapter 3 Chapter 4 编
  • 《C++ Primer Plus》学习随记1---模拟EOF

    EOF 文件结束符 End Of File 通常 EOF被定义为值 1 几种检测模拟EOF结束输入的代码实现 1 eof fail 从输入流读取数据 eof 如果检测到EOF cin eof 返回true 否则返回false fail 用来
  • 中台建设:中台有效落地的6脉神剑

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 关于利用Unity制作游戏登陆界面这件事

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 关于利用Unity制作游戏登陆界面这件事 前言 一 Unity是什么 二 制作历程 1 开始界面 2 音效背景 3 跳转页 总结 前言 由于是自学 故实现功能和代码不太完善
  • 模板方法模式(Template Method)

    模板方法模式 Template Method 概述 定义一个操作中的算法的骨架 而将一些步骤延迟到子类中 Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 例如生产饮料的流程 加原料 加水 烧水
  • 关于win10+2080ti 配置cuda cudnn 和tensorflow版本问题

    经过两天的设置 终于找到了配置的正确方法 现以文字的形式保留下来 防止忘记 本次配置的版本如下 python 3 5 2 cuda 10 0 一定要用10 0 10 1不行 cudnn 7 4 1 建议用这个 我用7 3 1提示我报错了 t
  • 【PTA】两个有序链表序列的交集 (20 分)

    记录这道题是因为被一个bug磨了很久很久 大概4个小时 自闭了 一直以为是自己的单链表知识不够才错的 妹想到是因为出现死循环 问了同学才知道错在这里 while p1 NULL p2 s2 这里 while p1 gt data p2 gt
  • 使用RT-Thread Studio 建立 L476 Nucleo 项目工程并完成相关功能

    使用RT Thread Studio 建立 L476 Nucleo 项目工程并完成相关功能 1 新建RTT工程 2 添加cube对应的驱动 Nucleo 板上 X2 低速时钟有 X3调整时钟无 UART2串口配置 PA2 PA3 用户按键

随机推荐

  • Python爬虫:浅谈【破解某易云音乐加密-JS逆向】

    网页及JS代码分析 我们这里直接进入某易云音乐官网 然后进入到任意一首歌曲的详情页 并进行分析 如下图 由于我们之前分析过网页的数据构成 所以这里不再赘述 直接点进R SO 4 1446235247 csrf token 往下翻 可以看到p
  • anconda下载

    a n c o n d a 下载以及基本指令 an
  • 300英雄服务器维护多久,300英雄7月19日停机更新公告

    300英雄 300英雄维护公告 尊敬的 300英雄 玩家 300英雄 将定于2019年07月19日06 00 09 00 星期五 对所有大区进行停机更新 届时请重新开启客户端便能正常进入游戏 如果在预定时间内无法完成维护内容 开服时间也将继
  • 玩转Windows服务系列——创建Windows服务

    玩转Windows服务系列 创建Windows服务 ATL 服务
  • Mysql在大型网站的应用架构演变

    原创文章 转载请注明 转载自http www cnblogs com Creator 本文链接地址 Mysql在大型网站的应用架构演变 本文已经被多处转载 包括CSDN推荐以及码农周刊等等 阅读数超过50w 回流到我博客流量的还是比较少 不
  • 使用 Nginx + Gunicorn 部署 Flask 项目

    使用 Nginx Gunicorn 部署 Flask 项目 Flask Web 项目开发完成后 开发人员只是在开发环境运行 只有本地可以访问到项目 如果要让用户访问到项目 需要将项目部署到生产环境上 在服务器运行项目 本文就使用阿里云服务器
  • C++ primer 【笔记】C++中this指针的用法详解

    1 this指针的用处 一个对象的this指针并不是对象本身的一部分 不会影响sizeof 对象 的结果 this作用域是在类内部 当在类的非静态成员函数中访问类的非静态成员的时候 编译器会自动将对象本身的地址作为一个隐含参数传递给函数 也
  • 【Linux命令详解

    文章标题 简介 一 参数列表 二 使用介绍 1 分页显示文件内容 2 搜索关键词 3 显示行号 4 显示特定内容 5 只显示匹配行 6 忽略大小写搜索 7 输出到文件 8 动态查看文件增长 9 开启对二进制文件的支持 10 显示控制字符 1
  • 博客搬家系列(六)-爬取今日头条文章

    博客搬家系列 六 爬取今日头条文章 一 前情回顾 博客搬家系列 一 简介 https blog csdn net rico zhou article details 83619152 博客搬家系列 二 爬取CSDN博客 https blog
  • 前端和后端就业前景如何?

    我个人的信息来源有两个渠道 一个是观察公司内网发布的招聘信息 另一个是观察朋友圈内猎头经常发布的招聘信息 基本算是从横向与纵向两个视角 较为全面的了解当前市场 先说结论 就国内市场而言 前端开发要求较容易 而发展前景相应的受限 发布的职位也
  • 数值作业:顺序消去法解线性方程组之C语言代码

    实际上后面的Guass列主选主元 全选主元 都是由顺序高斯消元法稍加改动变化而来的 但是顺序消元会出现一个问题 如果我们要保留的那个元的系数很小 那么在消元过程中 势必会用很大的数字乘以次方程后再加到别的方程上消去别的方程中的改元 这样就会
  • 《FFmpeg Basics》中文版-09-overlay-画中画

    正文 overlay视频技术经常被使用 常见的例子是放置在电视屏幕上的电视频道标志 通常位于右上角 以标识特定的频道 另一个例子是画中画功能 可以在主屏幕的其中一个角落显示小窗口 小窗口包含选定的电视频道或其他内容 同时在主屏幕上观看节目
  • Three.js基础介绍

    文章目录 前言 项目引入 项目介绍 推荐理由 场景展示 总结 前言 Three js是基于原生WebGL封装运行的三维引擎 在所有WebGL引擎中 Three js是国内文资料最多 使用最广泛的三维引擎 项目引入 Three js中文网 g
  • android 相机预览编译 libyuv 处理 YUV 数据

    下载源码 需翻墙 Android Studio 新建一个 NDK 项目 源码拷贝到 cpp 目录下 include 下面是头文件 source 下面是源码 其它文件基本用不到不用管 CMakeLists txt 是 cmake 编译脚本 现
  • IBM的语音识别(IBM speech to text 语言转换成文字)

    1 登陆网址https www ibm com watson developercloud speech to text html并注册 2 打开网址https console ng bluemix net catalog category
  • 前女友

    点击这个会出现代码 简而言之 要满足v1 v2 但是md5 v1 md5 v2 1 可以通过 PHP处理0e开头md5时hash字符串漏洞 0e开头md5所代表的值相同 来构造 下面这篇文章中有关于这个的构造 https blog csdn
  • 南航829数据结构历年真题答案

    2013年真题 第四题 问题描述 已知有两个带头结点的单链表A和B 元素值递增有序 编写函数调整删减链表 使A链表的元素值为A B的交集 并成为一个递减有序的单链表 要求写出算法思想以及相应代码 代码 2013数据结构第四题 include
  • 使用null,not in翻车了(oracle)

    水平有限 如有错误 请多指正 由于对null和not in理解得不是很透彻 导致在生产环境出问题了 请看下面的sql 为了简单 sql做过调整 select sd prestpword pres from ci pres pres wher
  • 全球第二大成人网站,黄了!

    推荐大家关注一个公众号 点击上方 编程技术圈 关注 星标或置顶一起成长 后台回复 大礼包 有惊喜礼包 每日英文 To give up is easy But to hold it together when everyone else th
  • 历届试题 高僧斗法  (博弈)

    题目 历届试题 高僧斗法 时间限制 1 0s 内存限制 256 0MB 锦囊1 博弈论 NIM取子游戏 锦囊2 将两个两个看成一组 他们之间的间隔可以看成一个NIM取子游戏 问题描述 古时丧葬活动中经常请高僧做法事 仪式结束后 有时会有 高