【模板题】几种常见的Nim游戏(博弈论)

article/2025/10/2 15:51:48

一、AcWing 891. Nim游戏

【题目描述】
给定 n n n堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。

【输入格式】
第一行包含整数 n n n
第二行包含 n n n个数字,其中第 i i i个数字表示第 i i i堆石子的数量。

【输出格式】
如果先手方必胜,则输出Yes
否则,输出No

【数据范围】
1 ≤ n ≤ 1 0 5 1≤n≤10^5 1n105
1 ≤ 每 堆 石 子 数 ≤ 1 0 9 1≤每堆石子数≤10^9 1109

【输入样例】

2
2 3

【输出样例】

Yes

【分析】


首先给出结论:若 a 1 ∧ a 2 ∧ ⋯ ∧ a n = 0 a_1\wedge a_2 \wedge \dots \wedge a_n=0 a1a2an=0 a i a_i ai表示第 i i i堆石子的数量),则先手必败,否则先手必胜。

在讲 N i m Nim Nim游戏之前,先了解一下什么是公平组合游戏 ( I C G ) (ICG) (ICG)。若一个游戏满足以下条件,则该游戏称为公平组合游戏:

  • 由两名玩家交替行动
  • 在游戏进行的任意时刻,可以执行的合法行动与轮到哪位玩家无关
  • 不能行动的玩家判负

N i m Nim Nim游戏属于公平组合游戏,但常见的棋类游戏,比如围棋就不是公平组合游戏,因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件 2 2 2 3 3 3


什么是先手必胜状态先手必败状态

  • 先手必胜状态:先手进行某一个操作,留给后手是一个必败状态时,对于先手来说是一个必胜状态。即先手可以走到某一个必败状态。
  • 先手必败状态:先手无论如何操作,留给后手都是一个必胜状态时,对于先手来说是一个必败状态。即先手走不到任何一个必败状态。

为什么当 a 1 ∧ a 2 ∧ ⋯ ∧ a n = 0 a_1\wedge a_2 \wedge \dots \wedge a_n=0 a1a2an=0时先手必败,否则先手必胜?

  1. 当到达结束状态时,即无法再进行任何操作,此时 0 ∧ 0 ∧ ⋯ ∧ 0 = 0 0\wedge 0\wedge \dots \wedge 0=0 000=0
  2. 如果其中某一个状态 a 1 ∧ a 2 ∧ ⋯ ∧ a n = x a_1\wedge a_2 \wedge \dots \wedge a_n=x a1a2an=x x x x不为 0 0 0),那么一定有一种拿法能够使得剩下的数异或值为 0 0 0。证明如下:
    假设 x x x的二进制表示里最高的一位 1 1 1在第 k k k位,则 a 1 ∼ a n a_1\sim a_n a1an中至少有一个数 a i a_i ai的第 k k k位是 1 1 1(如果全为 0 0 0那么 x x x的第 k k k位一定是 0 0 0),那么显然 a i ∧ x < a i a_i\wedge x<a_i aix<ai,所以我们可以从中拿走 a i − ( a i ∧ x ) a_i-(a_i\wedge x) ai(aix)个石子,那么第 i i i堆石子就剩 a i − ( a i − ( a i ∧ x ) ) = a i ∧ x a_i-(a_i-(a_i\wedge x))=a_i\wedge x ai(ai(aix))=aix个,即原式变为: a 1 ∧ a 2 ∧ ⋯ ∧ ( a i ∧ x ) ∧ ⋯ ∧ a n a_1\wedge a_2\wedge \dots \wedge (a_i\wedge x)\wedge \dots \wedge a_n a1a2(aix)an。由于 a 1 ∧ a 2 ∧ ⋯ ∧ a i ∧ ⋯ ∧ a n = x a_1\wedge a_2\wedge \dots \wedge a_i\wedge \dots \wedge a_n=x a1a2aian=x,因此上式变为 x ∧ x = 0 x\wedge x=0 xx=0
  3. 如果其中某一个状态 a 1 ∧ a 2 ∧ ⋯ ∧ a n = 0 a_1\wedge a_2 \wedge \dots \wedge a_n=0 a1a2an=0,那么不管怎么拿,剩下所有数的异或值一定不为 0 0 0,用反证法证明如下:
    假设第 i i i堆拿走一部分石子后剩余石子数为 a i ′ a'_i ai,且 a 1 ∧ a 2 ∧ ⋯ ∧ a i ′ ∧ ⋯ ∧ a n = 0 a_1\wedge a_2\wedge \dots \wedge a'_i\wedge \dots \wedge a_n=0 a1a2aian=0,而由于已知原状态为 a 1 ∧ a 2 ∧ ⋯ ∧ a i ∧ ⋯ ∧ a n = 0 a_1\wedge a_2\wedge \dots \wedge a_i\wedge \dots \wedge a_n=0 a1a2aian=0,将两个式子进行异或,由于除了 a i 、 a i ′ a_i、a'_i aiai以外其余数都是成对出现,异或值为 0 0 0,因此结果为 a i ∧ a i ′ = 0 a_i\wedge a'_i=0 aiai=0,所以 a i = a i ′ a_i=a'_i ai=ai,又由于假设第 i i i堆已经拿走一部分石子了,与 a i = a i ′ a_i=a'_i ai=ai矛盾,因此假设不成立,原命题成立。

综上,当先手局面为 a 1 ∧ a 2 ∧ ⋯ ∧ a n = 0 a_1\wedge a_2 \wedge \dots \wedge a_n=0 a1a2an=0时抛给后手的状态一定为 a 1 ∧ a 2 ∧ ⋯ ∧ a n ≠ 0 a_1\wedge a_2 \wedge \dots \wedge a_n≠0 a1a2an=0,当先手局面为 a 1 ∧ a 2 ∧ ⋯ ∧ a n ≠ 0 a_1\wedge a_2 \wedge \dots \wedge a_n≠0 a1a2an=0时抛给后手的状态一定是 a 1 ∧ a 2 ∧ ⋯ ∧ a n = 0 a_1\wedge a_2 \wedge \dots \wedge a_n=0 a1a2an=0。所以当 a 1 ∧ a 2 ∧ ⋯ ∧ a n = 0 a_1\wedge a_2 \wedge \dots \wedge a_n=0 a1a2an=0时先手必败,否则先手必胜。


【代码】

#include <iostream>
using namespace std;int main()
{int n, res = 0;cin >> n;while (n--){int x;cin >> x;res ^= x;}if (res) puts("Yes");else puts("No");return 0;
}

二、AcWing 892. 台阶-Nim游戏

【题目描述】
现在,有一个 n n n级台阶的楼梯,每级台阶上都有若干个石子,其中第 i i i级台阶上有 a i a_i ai个石子 ( i ≥ 1 ) (i≥1) (i1)
两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。
已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。

【输入格式】
第一行包含整数 n n n
第二行包含 n n n个整数,其中第 i i i个整数表示第 i i i级台阶上的石子数 a i a_i ai

【输出格式】
如果先手方必胜,则输出Yes
否则,输出No

【数据范围】
1 ≤ n ≤ 1 0 5 1≤n≤10^5 1n105
1 ≤ a i ≤ 1 0 9 1≤a_i≤10^9 1ai109

【输入样例】

3
2 1 3

【输出样例】

Yes

【分析】


结论:当奇数级阶梯的石子数量异或值为 0 0 0,即 a 1 ∧ a 3 ∧ ⋯ ∧ a 2 n − 1 = 0 a_1\wedge a_3\wedge \dots \wedge a_{2n-1}=0 a1a3a2n1=0时,先手必败,否则先手必胜。证明思路同经典 N i m Nim Nim游戏相似。


【代码】

#include <iostream>
using namespace std;int main()
{int n, res = 0;cin >> n;for (int i = 1; i <= n; i++){int x;cin >> x;if (i % 2) res ^= x;}if (res) puts("Yes");else puts("No");return 0;
}

三、AcWing 893. 集合-Nim游戏(SG函数)

【题目描述】
给定 n n n堆石子以及一个由 k k k个不同正整数构成的数字集合 S S S
现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合 S S S,最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。

【输入格式】
第一行包含整数 k k k,表示数字集合 S S S中数字的个数。
第二行包含 k k k个整数,其中第 i i i个整数表示数字集合 S S S中的第 i i i个数 s i s_i si
第三行包含整数 n n n
第四行包含 n n n个整数,其中第 i i i个整数表示第 i i i堆石子的数量 h i h_i hi

【输出格式】
如果先手方必胜,则输出Yes
否则,输出No

【数据范围】
1 ≤ n , k ≤ 100 1≤n,k≤100 1n,k100
1 ≤ s i , h i ≤ 10000 1≤s_i,h_i≤10000 1si,hi10000

【输入样例】

2
2 5
3
2 4 7

【输出样例】

Yes

【分析】


(1)Mex运算:
S S S表示一个非负整数集合,定义 m e x ( S ) mex(S) mex(S)为求出不属于集合 S S S最小非负整数运算,即:
m e x ( S ) = m i n { x } mex(S)=min\left\{x\right\} mex(S)=min{x}
例如: S = { 0 , 1 , 2 , 4 } S=\left\{0,1,2,4\right\} S={0,1,2,4},那么 m e x ( S ) = 3 mex(S)=3 mex(S)=3


(2)SG函数
在有向图游戏中,对于每个节点 x x x,设从 x x x出发共有 k k k条有向边,分别到达节点 y 1 , y 2 , … , y k y_1,y_2,\dots ,y_k y1,y2,,yk,定义 S G ( x ) SG(x) SG(x) x x x的后继节点 y 1 , y 2 , … , y k y_1,y_2,\dots ,y_k y1,y2,,yk S G SG SG函数值构成的集合执行 m e x mex mex运算的结果,即:
S G ( x ) = m e x ( { S G ( y 1 ) , S G ( y 2 ) , … , S G ( y k ) } ) SG(x)=mex(\left\{SG(y_1),SG(y_2),\dots ,SG(y_k)\right\}) SG(x)=mex({SG(y1),SG(y2),,SG(yk)})
特别地,整个有向图游戏 G G G S G SG SG函数值被定义为有向图游戏起点 s s s S G SG SG函数值,即: S G ( G ) = S G ( s ) SG(G)=SG(s) SG(G)=SG(s)
定义终点的 S G SG SG函数值为 0 0 0


(3)有向图游戏的和
G 1 , G 2 , … , G m G_1,G_2,\dots ,G_m G1,G2,,Gm m m m个有向图游戏。定义有向图游戏 G , G, G他的行动规则是任选某个有向图游戏 G i G_i Gi,并在 G i G_i Gi上行动一步, G G G被称为有向图游戏 G 1 , G 2 , … , G m G_1,G_2,\dots ,G_m G1,G2,,Gm的和。
有向图游戏的和的 S G SG SG函数值等于它包含的各个子游戏 S G SG SG函数的异或和,即:
S G ( G ) = S G ( G 1 ) ∧ S G ( G 2 ) ∧ ⋯ ∧ S G ( G m ) SG(G)=SG(G_1)\wedge SG(G_2)\wedge \dots \wedge SG(G_m) SG(G)=SG(G1)SG(G2)SG(Gm)


(4)结论

  • 对于一个图 G G G,如果 S G ( G ) ≠ 0 SG(G)\ne 0 SG(G)=0,则先手必胜,反之必败。
    证明:根据 m e x mex mex运算的定义可知,如果 S G ( G ) ≠ 0 SG(G)\ne 0 SG(G)=0,那么其连接的一点必为 0 0 0(如果其后继结点的值均不为 0 0 0,那么该点的 m e x mex mex结果必定为 0 0 0),当走到 S G SG SG值为 0 0 0的这一点时,由于 m e x mex mex运算,该结点所连接的结点的 S G SG SG值必定不为 0 0 0。又因为终点状态的 S G SG SG值为 0 0 0,所以只要先手的 S G SG SG值不为 0 0 0,便可以一直走向 S G SG SG值为 0 0 0的状态,最终走向终点。
  • 对于 n n n个图,如果 S G ( G 1 ) ∧ S G ( G 2 ) ∧ ⋯ ∧ S G ( G n ) ≠ 0 SG(G_1)\wedge SG(G_2)\wedge \dots \wedge SG(G_n)\ne 0 SG(G1)SG(G2)SG(Gn)=0,则先手必胜,反之必败。

例子:假设有一堆石子,石子数量为 10 10 10,每次可以拿走 2 2 2个或 5 5 5个,那么其有向图如下图所示:

在这里插入图片描述

红色标注的数字为该结点的 S G SG SG函数值,由于起点 10 10 10 S G SG SG函数值不为 0 0 0,因此该游戏局面为先手必胜状态。


【代码】

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>
using namespace std;const int N = 110, M = 10010;
int s[N], f[M];
int n, k;//记忆化搜索保存各结点的SG值
int sg(int x)
{if (~f[x]) return f[x];unordered_set<int> st;//保存x能到达的后继结点的SG值//枚举x能到达的所有状态for (int i = 0; i < k; i++)if (s[i] <= x) st.insert(sg(x - s[i]));//mex操作,找出x后继结点中未出现过的最小的非负整数for (int i = 0; ; i++)if (!st.count(i))return f[x] = i;
}int main()
{cin >> k;for (int i = 0; i < k; i++) cin >> s[i];memset(f, -1, sizeof f);int res = 0;cin >> n;while (n--){int x;cin >> x;res ^= sg(x);//对每个有向图的起始结点的SG值进行异或运算}if (res) puts("Yes");else puts("No");return 0;
}

四、AcWing 894. 拆分-Nim游戏

【题目描述】
给定 n n n堆石子,两位玩家轮流操作,每次操作可以取走其中的一堆石子,然后放入两堆规模更小的石子(新堆规模可以为 0 0 0,且两个新堆的石子总数可以大于取走的那堆石子数),最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。

【输入格式】
第一行包含整数 n n n
第二行包含 n n n个整数,其中第 i i i个整数表示第 i i i堆石子的数量 a i a_i ai

【输出格式】
如果先手方必胜,则输出Yes
否则,输出No

【数据范围】
1 ≤ n , a i ≤ 100 1≤n,a_i≤100 1n,ai100

【输入样例】

2
2 3

【输出样例】

Yes

【分析】


相比于集合 N i m Nim Nim游戏,这里的每一堆可以变成小于原来那堆的任意大小的两堆
a [ i ] a[i] a[i]可以拆分成 ( b [ i ] , b [ j ] ) (b[i],b[j]) (b[i],b[j]),为了避免重复规定 b [ i ] ≥ b [ j ] b[i]\geq b[j] b[i]b[j],即: a [ i ] > b [ i ] ≥ b [ j ] a[i]>b[i]\geq b[j] a[i]>b[i]b[j]
相当于一个局面拆分成了两个局面,由 S G SG SG函数理论,多个独立局面的 S G SG SG值,等于这些局面 S G SG SG值的异或和
因此需要存储的状态就是 s g ( b [ i ] ) ∧ s g ( b [ j ] ) sg(b[i])\wedge sg(b[j]) sg(b[i])sg(b[j])


【代码】

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>
using namespace std;const int N = 110;
int f[N];
int n;int sg(int x)
{if (~f[x]) return f[x];unordered_set<int> st;//枚举x可变成的所有状态(i, j),防止重复j只用枚举到i即可for (int i = 0; i < x; i++)for (int j = 0; j <= i; j++)st.insert(sg(i) ^ sg(j));//mex操作for (int i = 0; ; i++)if (!st.count(i))return f[x] = i;
}int main()
{cin >> n;memset(f, -1, sizeof f);int res = 0;while (n--){int x;cin >> x;res ^= sg(x);}if (res) puts("Yes");else puts("No");return 0;
}

http://chatgpt.dhexx.cn/article/6QNaPjHG.shtml

相关文章

Kafka 为什么能那么快 | Kafka高效读写数据的原因

点击上方“服务端思维”&#xff0c;选择“设为星标” 回复”669“获取独家整理的精选资料集 回复”加群“加入全国服务端高端社群「后端圈」 无论 kafka 作为 MQ 也好&#xff0c;作为存储层也罢&#xff0c;无非就是两个功能&#xff08;好简单的样子&#xff09;&#xff0c…

【人人都懂密码学】一篇最易懂的Java密码学入门教程

密码与我们的生活息息相关&#xff0c;远到国家机密&#xff0c;近到个人账户&#xff0c;我们每天都在跟密码打交道&#xff1a; 那么&#xff0c;密码从何而来&#xff1f;生活中常见的加密是怎么实现的&#xff1f;怎么保证个人信息安全&#xff1f;本文将从这几方面进行浅谈…

Kafka必须掌握的核心技术--为什么吞吐量大、速度快?

点击上方“服务端思维”&#xff0c;选择“设为星标” 回复”669“获取独家整理的精选资料集 回复”加群“加入全国服务端高端社群「后端圈」 Kafka是大数据领域无处不在的消息中间件&#xff0c;目前广泛使用在企业内部的实时数据管道&#xff0c;并帮助企业构建自己的流计算应…

哪些软件问题也可导致硬盘录像机死机

硬盘录像机死机除了一些硬件上的问题之外&#xff0c;也有不少是由软件引起的。如&#xff1a; 1、病毒感染 病毒是计算机操作的大患&#xff0c;几乎人人恶之。病毒可以使计算机工作效率急剧下降&#xff0c;造成频繁死机、数据丢失、系统崩溃&#xff0c;甚至损坏主板、硬盘、…

导致硬盘录像机卡死的十大原因分析

硬盘录像机卡死除了一些技术上的问题之外&#xff0c;也有不少是由软件引起的。如&#xff1a; 1、病毒感染 病毒是硬盘录像机操作的大患&#xff0c;几乎人人恶之。病毒可以使硬盘录像机工作效率急剧下降&#xff0c;造成频繁死机、数据丢失、系统崩溃&#xff0c;甚至损坏主板…

谈项目管理和软件测试过程

谈项目管理和软件测试过程&#xff08;一&#xff09; 1. 软件测试在公司的组织保障是基础 1.1 研发部组织结构介绍 以华友公司研发部的组织结构为例&#xff0c;测试部门属于研发部副总裁直接管理&#xff0c;见如下结构图 公司研发部的组织结构图 …

NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装

一、NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起&#xff0c;传统的关系数据库在应付Web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心&#xff0c;暴露了很多难以克服的问题&#xff1a; &#xff08;1…

软件公司面试总结

文章目录 面试1面试2面试3面试4面试5面试6 面试1 1、你先做个简单的自我介绍吧 我叫张三&#xff0c;2015年在重庆邮电大学毕业。我读的专业是电子信息。工作已经快5年了。 我上家公司的主营业务是在柬埔寨做移动支付钱包。 最近做的一个项目是聚合支付的项目&#xff0c;主要…

腾讯的硬盘里,有互联网的昨天今天和明天

作者&#xff1a;史中 来源&#xff1a;浅黑科技&#xff08;qianheikeji&#xff09; 2018年1月1日&#xff0c;太阳照常升起。 世界上所有的时钟合谋&#xff0c;把最后一个90后推过了18岁的门槛。对于这些年轻的面孔来说&#xff0c;自由的风终于如期而至&#xff0c;只是其…

机械硬盘与SSD固态硬盘性能的深度

从7200转硬盘升级到10000转的迅猛龙&#xff0c;那叫量变。从10000转的迅猛龙升级到SSD&#xff0c;这个叫质变。2者的差距是有些地方相当大&#xff0c;而有些却很接近&#xff0c;主要是难比较。经常听到有人说&#xff1a;我买2个黑盘组RAID 0&#xff0c;传输率也有接近250…

sudo rm-rf引发的惨案——Linux硬盘的分区和挂载

前言 前不久&#xff0c;刚使用组里的一台服务器&#xff0c;这台服务器平时用的人不多&#xff0c; 没有严格的管理机制&#xff0c;大家都使用同一个用户名进行远程连接&#xff0c;人人都有sudo权限。我因为对Linux不是非常熟悉&#xff0c;使用管理员权限下执行了一个删除…

DVR-硬盘录像机

硬盘录像机&#xff08;Digital Video Recorder&#xff0c;简称DVR&#xff09;&#xff0c;即数字视频录像机&#xff0c;相对于传统的模拟视频录像机&#xff0c;采用硬盘录像&#xff0c;故常常被称为硬盘录像机&#xff0c;也被称为DVR。 它是一套进行图像存储处理的计算…

[转]80后研制出世界最快硬盘:传输速度每秒1.5GB

传输速度每秒1.5GB&#xff0c;仅需3秒就能传输一张DVD光盘的数据&#xff0c;是普通硬盘速度的15倍。一秒钟可以访问31万次&#xff0c;而普通硬盘仅可以访问16次。这些数据&#xff0c;描绘着一款固态硬盘的卓越性能。研发出这款世界传输速度最快、性能最好的固态硬盘的&…

我们测了30款移动硬盘,却如此尴尬

我最近在研究移动硬盘&#xff0c;如果你也感兴趣不妨来看看我这些天的研究成果吧。不卖关子&#xff0c;我们发现不同品牌SDD移动硬盘间存在着很大差异&#xff0c;如果你非常在意读写速度就需要慎重选择了&#xff1b;而不同品牌HDD移动硬盘间在速度上并不存在巨大差异&#…

web安全攻防渗透测试实战指南

1. Nmap的基本 Nmap ip 6 ip Nmap -A 开启操作系统识别和版本识别功能 – T&#xff08;0-6档&#xff09; 设置扫描的速度 一般设置T4 过快容易被发现 -v 显示信息的级别&#xff0c;-vv显示更详细的信息 192.168.1.1/24 扫描C段 192.168.11 -254 上 nmap -A -T4 -v -i…

加速!加速!西数万转硬盘猛禽RAID测试

[迅猛龙的袭击] 西部数据猛禽系列在玩家们的心目里或许一直是高高在上&#xff0c;因为在西数之前的策略里&#xff0c;这个系列的产品都是列入到“企业级”里的&#xff0c;但随着高端玩家对硬盘性能的需求越来越高&#xff0c;“猛禽”这个代表极端性能的产品线&#xff0c;也…

xboxone硬盘坏的表现_你的机械硬盘有RV振动传感器吗?三款2.5寸HDD测试

机械硬盘人人都用&#xff0c;虽然SSD的价格逐年下降&#xff0c;可是就容量/价格比来说&#xff0c;离机械硬盘还有不少距离。尽管HDD有着大容量的优势&#xff0c;可是如今硬盘存储密度越来越高&#xff0c;磁头距离盘片太近&#xff0c;现在的硬盘也越来越脆弱&#xff0c;经…

32g的u盘速度测试软件,速度堪比硬盘 海盗船32GB海量运动型U盘评测

速度堪比硬盘 海盗船32GB海量运动型U盘评测 出处&#xff1a;快科技 2010-03-23 15:39:30 作者&#xff1a;良宵 编辑&#xff1a;良宵[爆料] 收藏文章 内容导航&#xff1a; 第[01]页&#xff1a;[导言]第[02]页&#xff1a;[产品赏析]第[03]页&#xff1a;[性能测试及总结…

运维java项目的技巧 (war包、jar包、docker环境)

最近上线了修复log4j2漏洞的java项目。小结下系统更新操作过程。 一、tomcat下的war包的项目 cd /var/lib/tomcat9 root:/var/lib/tomcat9# ls webapps/ test test.war test.war-bak ROOTsystemctl stop tomcat9 备份test.war 上传新的test.war systemctl start tomcat9查…

《Linux运维总结:Windows Server 2012 R2安装JAVA环境》

文章目录 一、部署包下载二、部署步骤总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 一、部署包下载 链接&#xff1a;https://pan.baidu.com/s/1U2EstyXu_r7_uD0YpERhAQ 提取码&#xff1a;1234二、部署步骤 1、双击运行jdk…