51nod三大经典博弈(模板)

Posted redblackk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod三大经典博弈(模板)相关的知识,希望对你有一定的参考价值。

真是令人惊讶,三大经典博弈都可以通过数学运算得到结论简单解决!

 

Bash游戏(数学余数方法)

关键:必输局面,谁面对(k+1)个石子这个局面必输!

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int T;
 7     cin>>T;
 8     while(T--)
 9     {
10         int n,k;
11         cin>>n>>k;
12 
13         if(n%(k+1)) cout<<A<<endl;
14         else cout<<B<<endl;
15     }
16 
17     return 0;
18 }

这个游戏刚开始我是找不到规律的,是通过k==2时推算出来的(数小游戏简单而且比较好找规律嘛,发现只要是3的倍数(谁面对3的倍数局面)先手必输)。

这里只不过把k=2扩展到了n维,套路还是一样。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int T;
 7     cin>>T;
 8     while(T--)
 9     {
10         int n;
11         cin>>n;
12 
13         if(n%3) cout<<A<<endl;
14         else cout<<B<<endl;
15     }
16 
17     return 0;
18 }

 

Nim游戏(数学异或方法)

关键:必输局面,谁面对2堆石子相同这个局面必输!

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int n;
 7     cin>>n;
 8     int ans=0;//0异或任何数都是那个数
 9     for(int i=1;i<=n;i++)
10     {
11         int x;
12         cin>>x;
13 
14         ans=ans^x;
15     }
16 
17     if(ans) cout<<A<<endl;
18     else cout<<B<<endl;
19 
20     return 0;
21 }

 

Bash游戏(数学黄金比例,黄金分割方法)

关键:必输局面,谁面对(k+1)个石子这个局面必输!

 

完。

以上是关于51nod三大经典博弈(模板)的主要内容,如果未能解决你的问题,请参考以下文章

51nod1069(博弈)

51nod-1534-博弈

51nod-1605-博弈

51 Nod 1072 威佐夫游戏(简单博弈)

51nod_1714:B君的游戏(博弈 sg打表)

51 Nod 1069 Nim游戏(简单博弈)