题目链接:http://lx.lanqiao.cn/problem.page?gpid=T37

题意:中文题诶~

思路:nim博弈

个人感觉这题最难的地方是将题目转换为博弈模型,如果能将之转换为博弈模型的话题目也就迎刃而解啦;

本题的解法是将相邻的两个和尚之间的台阶数目看做一堆石头,那么就变成nim博弈啦,对于和尚数目为奇数的情况,直接将最后一个和尚忽略或者在最后那个和尚后面再加一个和尚即可,后者相当于加了一堆数目为0的石头,和前者没什么区别;

本题和一般nim博弈的不同之处是本题中石头的数目是可以增加的,其实就是将后面那个和尚往后移啦;如果直接按照博弈思路去求那个bi'的话得到的解可能不是最小的(在本题中最后一组数据会wa)。要得到最小解的话就需要我们枚举每一个和尚并分别判断石头增加和减少的情况啦。。

直接求bi'的代码:

 #include <iostream>
#include <stdio.h>
#define MAXN 110
using namespace std; int a[MAXN], b[MAXN]; int main(void){
char ch;
int pos=;
while(){
scanf("%d%c", &a[pos++], &ch);
if(ch=='\n'){
break;
}
}
if(pos&){
pos--;
}
for(int i=; i<pos; i+=){
b[i>>]=a[i+]-a[i]-;
}
pos>>=;
int ans=;
for(int i=; i<pos; i++){
ans^=b[i];
}
if(!ans){//面对奇异局势,必败
cout << - << endl;
}else{
for(int i=; i<pos; i++){
if((ans^b[i])<b[i]){//找到bi'替换bi使变成奇异局势
int cnt=ans^b[i];
cout << a[i<<] << " " << a[i<<]+(b[i]-cnt) << endl;
break;
}
}
}
return ;
} // 1 4 8 12 16 19 28 33 35 36 40 45 52 66 67 68 69 77 85 99 102 134 155 211 214 216 355 376 400 412
// 134 148

枚举求解的代码:

#include <iostream>
#include <stdio.h>
#define MAXN 110
using namespace std; int a[MAXN], b[MAXN]; int main(void){
char ch;
int pos=;
while(){
scanf("%d%c", &a[pos++], &ch);
if(ch=='\n'){
break;
}
}
if(pos&){
pos--;
}
int len=pos;
for(int i=; i<pos; i+=){
b[i>>]=a[i+]-a[i]-;
}
pos>>=;
int ans=;
for(int i=; i<pos; i++){//面对奇异局势,必败
ans^=b[i];
}
if(!ans){
cout << - << endl;
}else{
for(int i=; i<len; i++){//枚举每一个人移动的情况
for(int j=a[i]+; j<a[i+]; j++){//当前和尚可以向前移动到前一个和尚下面一个台阶
if(i&){//若当前是第偶数个和尚,则相当于当前堆石头数目增加
int cnt=j-a[i-]-;
if(!(ans^cnt^b[i/])){//移动后变成奇异局势
cout << a[i] << " " << j << endl;
return ;
}
}else{//当前是第奇数个和尚,则相当于当前堆石头数目减少
int cnt=a[i+]-j-;
if(!(ans^cnt^b[i/])){//移动后变成奇异局势
cout << a[i] << " " << j << endl;
return ;
}
}
}
}
}
return ;
}

蓝桥杯T37(nim博弈)的更多相关文章

  1. 2016蓝桥杯"取球博弈"问题

    较难,网上有能得出正确结果的代码,但是读了一下,像是拼凑出的结果,逻辑不通,代码和注释不符 参考网上代码写了一版,结构相对清晰,注释比较详细 题目很长: 两个人玩取球的游戏.一共有N个球,每人轮流取球 ...

  2. java实现第七届蓝桥杯取球博弈

    题目9.取球博弈 取球博弈 两个人玩取球的游戏. 一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目. 如果无法继续取球,则游戏结束. 此时,持有奇数个球的一方获胜. 如果两 ...

  3. 取球游戏_nyoj_518(博弈-蓝桥杯原题).java

    取球游戏 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 2   描述 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下 ...

  4. 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈

    2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈 题目描述 **取球博弈 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并 ...

  5. 第九届蓝桥杯国赛+第二天的第11届acm省赛的总结

    第九届蓝桥杯国赛+第二天的第11届acm省赛的总结 25号坐的去北京的火车,10个小时的火车,然后挤了快两个小时的地铁,最终达到了中国矿业大学旁边的订的房间.12个小时很难受,晕车症状有点严重,吃了快 ...

  6. HDU 2509 Nim博弈变形

    1.HDU 2509  2.题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败. 3.总结:Nim博弈的变形,还是不知道怎么分析,,,,看了大牛的博客. 传送门 首先给出结 ...

  7. HDU 1907 Nim博弈变形

    1.HDU 1907 2.题意:n堆糖,两人轮流,每次从任意一堆中至少取一个,最后取光者输. 3.总结:有点变形的Nim,还是不太明白,盗用一下学长的分析吧 传送门 分析:经典的Nim博弈的一点变形. ...

  8. 2012年 蓝桥杯预赛 java 本科 题目

    2012年 蓝桥杯预赛 java 本科 考生须知: l  考试时间为4小时. l  参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...

  9. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

随机推荐

  1. java中的clone方法

    Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那 ...

  2. git 从远端拉取指定分支和推送本地某个分支到远端

    如题,可以直接从远端拉取某个分支,也可以直接将本地某个分支推送到远端. 原文链接:https://www.cnblogs.com/hamsterPP/p/6810831.html

  3. Cmder配置

    中文乱码和重叠 当我们使用ls命令查看文件目录时,发现,中文被显示成了一些奇怪的乱码,将以下几行代码配置在cmder/config/user-aliases下即可解决问题: l=ls --show-c ...

  4. hadoop —— eclipse插件安装配置

    安装: 1. 将hadoop-core-0.20.2-cdh3u6/contrib/eclipse-plugin/hadoop-eclipse-plugin-0.20.2-cdh3u6.jar拷贝到e ...

  5. oracle-数据库的各种-锁-详解

    数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 如果是单用户的 ...

  6. 计算机中丢失OPENGL.dll

    开发OpenGL项目时,在VS开发环境下可能会出现如图所示的错误. 在c:\windows\system32和SysWow64文件夹下存在opengl32.dll,此时,所写程序能够正常编译,但是,程 ...

  7. MySQL Unable to convert MySQL date/time value to System.DateTime的解决办法

    在连接串中加入 Convert Zero Datetime=True

  8. js正则表达式(2)

    找到以某个字符串开头的字符串 var myReg=/^(abc)/gim; 如果不加m,那么只找一行,而加了m可以找到每行中以该字符串开头的匹配文本. 如: abcsfsdfasd7890hklfah ...

  9. Redis常用数据结构和操作

    1.String 存入字符类型 Set name luowen 设置name = luowen 存储 Get name 获取设置好的name的值 Setnx name luowen 设置name键值为 ...

  10. DOM (文档对象模型(Document Object Model)

    DOM(文档对象模型(Document Object Model) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上 ...