首页 > 其他分享 >博弈论

博弈论

时间:2023-05-07 21:14:54浏览次数:46  
标签:... return cout rr Nim int 博弈论

基础概念

相关参考资料:易老师整理(放个大佬的链接)

Nim Game

题目:有n堆石子,数量分别为\(a_1,a_2,...,a_n\),两个玩家均足够聪明,轮流拿石子,每次仅可以从任意一堆中拿走任意数量的石子。
结论:当\(a_1⊕a_2⊕...⊕a_n≠0\)时,先手必胜;否则先手必败。
而且,令\(a_1⊕a_2⊕...⊕a_n=x\),则定有一个数\(a_i\),有\(a_i⊕x<a_i\),则先手仅需将第i堆石子取走\(a_i-a_i⊕x\)个,第i堆留下\(a_i⊕x\),则此时所有堆的异或为0,下一后手面对必败局面。

线上题目

  1. 暑假博弈论专题训练
  2. Mingming's Nim
    Nim游戏模板
#include <bits/stdc++.h>
using namespace std;

const int maxm = 1e2+10;
typedef long long LL;
int n,s[maxm];

void out(int a,int b){
	cout<<a<<" "<<b<<endl;
	return ;
}

void solve(){
	cin>>n;
	int rr=0,c,a,b,t;
	for(int i=1;i<=n;++i){
		cin>>s[i];
		rr^=s[i];
	}
	if(rr==0){
		cout<<"2"<<endl;
		cin>>a>>b;
		rr^=s[a];
		s[a]-=b;
		rr^=s[a];
	}
	else{
		cout<<"1"<<endl;
	}
	while(1){
		for(int i=1;i<=n;++i){
			if((s[i]^rr)<s[i]){
				out(i,s[i]-(s[i]^rr));
				t=s[i];
				s[i]=s[i]^rr;
				rr^=t;
				rr^=s[i];
				break;
			}
		}
		cin>>c;
		if(c==0) return ;
		else if(c==-1){
			cout<<"0 0"<<endl;
			return ;
		}
		cin>>a>>b;
		rr^=s[a];
		s[a]-=b;
		rr^=s[a];
	}
	return ;
}

int main()
{
	int _=1;
	cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

标签:...,return,cout,rr,Nim,int,博弈论
From: https://www.cnblogs.com/Qiansui/p/17380100.html

相关文章

  • J - Simple Game (博弈论外壳下的模运算考察题目)
    原题链接:https://vjudge.net/contest/555710#problem/J手工翻译:Alice和Bob在玩一个游戏有这样一个数列a1,a2,a3,a4……an长度为n,他们轮流移走一个整数当数列中没有可移走的整数时游戏结束,Alice移走的数的和是S1,Bob移走的数的和是S2如果abs(s1-s2)为奇数,Alice赢,否则Bob赢接下来给......
  • 博弈论入门
    博弈论有向图游戏Nim游戏Nim游戏的定义是,给定\(n\)堆石子,两个玩家去交替的拿石头,每次只能拿某一堆的石头,如果此时有一个玩家无法进行这个游戏了,则游戏结束。为了解决这个问题,比较直接的会先想到一个类似于\(DP\)的思路,考虑当前每个状态,去将其划分为两个状态,这里我们定义为\(P:......
  • HDU 1527 取石子游戏(博弈论)
    取石子游戏TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):3717    AcceptedSubmission(s):1868ProblemDescription有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有......
  • 博弈论dp
    博弈DP解决的是两人轮流操作,且没有平局的两人博弈游戏,和博弈问题的形式相同。博弈论dp正推会有后效性,这是无法解决的所以一般博弈论dp会选着逆推但实际上逆推也不好写,所以这时候一般会以记忆化搜索dp的形式来写博弈论dp ......
  • 【ACM博弈论】SG函数入门(1):从巴什博奕到尼姆游戏
    在我小时候以前做题的时候,遇到博弈题往往都是漫无目的地打表找规律,或者找一些特殊情况但是没有很好的分析方法。其实博弈题是有比较套路的解题方法的,那就是利用SG函数,第一节不会讲到SG函数的具体用法,我们先来博弈入个门,学习一下最基本的博弈类型:Nim游戏。......
  • [数学记录] 博弈论
    Part0.问题只有公平博弈,不能操作者输。Part1.基础理论BoolSG:必败态:后继全是必胜态;必胜态:后继存在必败态。必败态SG值=0当个游戏SG值为后继状态SG值的......
  • 博弈论
    所有必败态的所有下一个状态一定是必胜态所有必胜态的至少一个下一个状态一定是必败态 得知可以到达必败点的点全是必胜点,只能到达必胜点的点都是必败点https://ac.n......
  • 博弈论学习笔记
    挖个巨坑,慢慢填。从Nim游戏入手问题:有\(n\)堆石子,第\(i\)堆石子有\(s_i\)个,两个人轮流取石子,每人每次只能从一堆中取任意数量的石子,可以取完,不能不取。问先手必......
  • 博弈论专题
    基本概念去复习公平组合游戏nim游戏有向图游戏和SG函数SG函数值相同的游戏等价——lingfunny各种模型nim游戏模型:\(n\)堆石子,每次可以取一堆中的若干个......
  • ZOJ4116 Game on a Graph(图+博弈论)
    题目连接:​​点击这里​​给出n个点m条边的图,k个人做游戏。分为两队,每次给图取掉一条边,若这这次行动后图不连通了,这个队就赢了,输出赢的队伍。只要你能保证最低联通量,就是n......