2022广航蓝桥杯选拔赛压轴题:取数博弈游戏
原题链接
对于这种「判断先手后手的必胜必败」的题目,博弈论方向是一个优先考虑的方向。
博弈论的重要思想就是决策者都要做出全局最优的决策而非局部最优,就好比专业的棋手走一步看五步,而博弈论则要求棋手走一步看无限步。
解题思路
凡是和数论相关的问题都可以考虑运用数形结合的思想把问题简化,我们将所给数列绘制成折线图,如下图所示:
结合游戏规则仔细观察,会发现其中有很大一部分数据是冗余的,即不可能被取到的数据,将其剔除可以简化问题,简化后的图像分为两部分,分别是原左侧的“\”形图像和原右侧的“/”形图像,下文将其分别称为“图\”和“图/”。
- 若“图\”和“图/”的元素数量为1,则Alice直接取该部分的那个数字,即可直接获胜
接下来分析两图像的元素数量均大于1的情况,令“图\”左上角的值为a,右下角的值b,则a>b,令“图/”左下角的值为c,右上角的值d,则c<d。
- 若a>=d,则当有一方取了“图/”,则以后就只能取“图/”了。
- 若“图/”的元素数量为奇数,则显而易见的谁先取“图/”谁就必赢。
- 而若“图/”的元素数量为偶数,那么两人都不会去取“图/”,原因也很简单,如果我们取了“图/”,那么此时轮到对方取,“图/”的元素数量为奇数,那么我必输,所以最优解是取另一边的“图\”,逼着对方先去取“图/”就赢了,但是对手也不撒,也会和你一样取“图\”,也想着逼着你先去取“图/”,这里又要分为2种情况:
- 若b>d,则当把“图\”取完后必取“图/”,所以若“图\”的元素数量为奇数,则谁取谁就必赢,若为偶数,则无论取哪边都必输。
- 若b<=d,则当把“图\”取完后就不能取“图/”了,所以若“图\”的元素数量为奇数,则谁取谁就必赢,若为偶数,则无论取哪边都必输。
- 同理,若d>=a的情况请大家仿照上面自行推理。
总结以上的分析,我们发现,只要“图\”或“图/”的元素数量为奇数,那么先手(即Alice)必赢,这样问题就简单多了,代码如下:
#include <algorithm>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
#define M 1000000007
int main()
{int t, n, i, nl, nr;vector<int> a(1005, 0);scanf("%d", &t);while (t--){scanf("%d", &n);for (i = 0; i < n; i++) //输入数列{scanf("%d", &a[i]);}// 计算“图\”和“图/”的元素数量nl = nr = n;for (i = 1; i < n; i++){if (a[i] >= a[i - 1]){nl = i;break;}}for (i = n - 1; i > 0; i--){if (a[i - 1] >= a[i]){nr = n - i;break;}}if (nl % 2 || nr % 2) // 只要“图\”或“图/”的元素数量为奇数,那么先手(即Alice)必赢printf("Alice\n");elseprintf("Bob\n");}return 0;
}
2022广航蓝桥杯选拔赛压轴题:取数博弈游戏相关推荐
- 【蓝桥杯选拔赛真题17】Scratch金字塔 少儿编程scratch蓝桥杯选拔赛真题讲解
目录 Scratch金字塔 一.题目要求 1.准备工作 2.编程实现 二.题目分析 1.角色分析 2.背景分析 3.准备工作 三.解题思路 1.流程分析 2.流程图绘制 四.程序编写 五.考点分析 六 ...
- 【蓝桥杯选拔赛真题42】Scratch模拟画板 少儿编程scratch蓝桥杯选拔赛真题讲解
目录 scratch模拟画板 一.题目要求 编程实现 二.案例分析 1.角色分析 2.背景分析 3.前期准备 三.解题思路 1.思路分析 2.详细过程 四.程序编写 五.考点分析 六.推荐资料 1.入 ...
- 【蓝桥杯选拔赛真题01】Scratch消失的小猫 少儿编程scratch蓝桥杯选拔赛真题讲解
目录 scratch消失的小猫 一.题目要求 1.准备工作 2.编程实现
- 【蓝桥杯选拔赛真题15】Scratch碰苹果游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
目录 scratch碰苹果 一.题目要求 编程实现 二.题目分析
- 【蓝桥杯选拔赛真题34】Scratch数苹果 少儿编程scratch蓝桥杯选拔赛真题讲解
目录 scratch数苹果 一.题目要求 1.编程实现 2.评判标准
- 【蓝桥杯省赛真题2】Scratch射击螃蟹 少儿编程scratch蓝桥杯选拔赛真题讲解
目录 scratch射击螃蟹 一.题目要求 1.准备工作 2.具体要求 二.题目分析
- 【蓝桥杯选拔赛真题09】Scratch小猫旅行 少儿编程scratch蓝桥杯选拔赛真题讲解
目录 scratch小猫旅行 一.题目要求 1.编程实现 2.具体要求
- 【蓝桥杯选拔赛真题50】Scratch小猫跑步 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
目录 scratch小猫跑步 一.题目要求 编程实现 二.案例分析 1.角色分析
- 【蓝桥杯选拔赛真题54】Scratch小猫钓鱼 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
目录 scratch小猫钓鱼 一.题目要求 编程实现 二.案例分析 1.角色分析
最新文章
- 本地连接受限制或无连接的解决办法
- java condition_死磕Java并发:J.U.C之Condition
- stm8s103k3 周期 捕获_STM8S103K3 - 主流基本型系列8位MCU,具有8 KB Flash、16 MHz CPU和集成EEPROM - STMicroelectronics...
- XCTF-高手进阶区:PHP2
- SqlServer按时间自动生成生成单据编号
- 16速 java_不停歇的 Java 即将发布 JDK 16,新特性速览!
- python环境安装opencv_服务器python环境和opencv安装方法
- c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
- 阿里面试算法题(一)
- RTF(rich textformat)富文本格式
- 制作Android程序的应用图标并应用
- jekins自动化部署
- 悲欢离合是红尘,坎坎坷坷是人生
- 假期读书计划表怎么写?能够随时查看读书计划的手机便签
- 时钟周期、机器周期、总线周期、指令周期的关系
- V4L2视频驱动程序开发之驱动方法poll 和 应用程序select
- 企业家够疯狂:他选择了挑战微软
- 椭圆曲线密码学ECC
- JFrame 设置还原按钮(窗口最大化后,最大化按钮变为还原按钮)
- Arcgis地名标注插入文本