Algorithm 破塔者-带除数的nim游戏变体
我遇到了一个名为“破塔者”的游戏,它似乎是游戏的一个变体Algorithm 破塔者-带除数的nim游戏变体,algorithm,math,game-theory,nim-game,Algorithm,Math,Game Theory,Nim Game,我遇到了一个名为“破塔者”的游戏,它似乎是游戏的一个变体 有两个玩家,玩家1和玩家2 最初有n塔,其中每个塔的高度m,都是n和m正整数 玩家1开始,然后轮流移动 在每个回合中,玩家可以选择一个高度为x>1的塔,并将其高度降低为正整数y,其中1为一般情况 这确实可以像解决问题一样解决,但使用不同的灵活定义 在最初的游戏中,塔的灵巧度被简单地定义为它的高度 在这种变化中,高度h(T)=x=p的塔的敏捷度T₁ˢimk_…pₖˢᵏ,带有pᵢ素数,是 n(T)=s₁ + … + sₖ ntowersL
- 有两个玩家,玩家1和玩家2
- 最初有
塔,其中每个塔的高度n
,都是m
和n
正整数m
- 玩家1开始,然后轮流移动
- 在每个回合中,玩家可以选择一个高度为
的塔,并将其高度降低为正整数x>1
,其中y
1为一般情况 这确实可以像解决问题一样解决,但使用不同的灵活定义 在最初的游戏中,塔的灵巧度被简单地定义为它的高度 在这种变化中,高度
h(T)=x=p的塔的敏捷度
₁ˢimk_…pₖˢᵏ代码>,带有T
pᵢ代码>素数,是
n(T)=s₁ + … + sₖ
towersn
L=(T₁, …, Tₙ)代码>是常见的
如果你的回合开始时敏捷度为0,你将失去你所做的一切,假设其他玩家玩得很完美 否则,你只需要做一个动作,使敏捷变成零 你可以这样做,因为如果n(L)=n(T₁) ⊕ … ⊕ n(T)ₙ)
那么有一个塔,让我们假设它是n(L)>0
T,而不失去泛化ₙ代码>,这样
这样的塔是存在的:最左边的n(Tₙ) ⊕ n(L)
位是n(L)
,这是因为一些塔1
Tₙ代码>在该位位置有一个1。执行
您杀死1,并且不改变n(Tₙ) ⊕ n(L)
较小 那么您只需要修改n(t)的更重要位ₙ)因为它是
的最左边的位ₙ) ⊕ n(L)n(L)
Tₙ代码>至
Tₙ'编码>使得
,因此n(Tₙ') = n(T)ₙ) ⊕ n(L)
n(L')=n(T₁) ⊕ … ⊕ n(T)ₙ') = n(T)₁) ⊕ … ⊕ n(T)ₙ) ⊕ n(L)=n(L)⊕ n(L)=0
这种移动总是可能的,例如将高度降低到x'=p₁ˢimk_…pₗ₋₁ˢˡ⁻ñpₗᵈ代码>,带
且M不是1,则第二名玩家将获胜l这是塔式断路器(等高)的答案。
答复- 如果M是1,第二个玩家将获胜
- 如果N为偶数(N%2==0)
- 如果N是奇数
而M不是1,则第一个玩家将获胜(N%2==1)
这是我的C++代码。(它被接受)< /P>
#包括
使用名称空间std;
int Q,N,M;
int main(){
cin>>Q;
而(Q--){
cin>>N>>M;
如果(M==1 | | N%2==0)不能,我将此作为一个自我回答的问题重新发布,因为它已被机器人删除。我不希望我的答案丢失。我将投票关闭此问题,因为它与编程无关。@Kara,这是关于算法的,它是明确的
#include <bits/stdc++.h>
using namespace std;
int Q, N, M;
int main() {
cin >> Q;
while(Q--) {
cin >> N >> M;
if(M == 1 || N % 2 == 0) cout << 2 << endl;
else cout << 1 << endl;
}
}