Conan and Agasa play a Card Game codeforce
題意:有一些牌,牌上面寫著數字,Conan(以下簡稱C)和Agasa(以下簡稱A)兩人玩游戲,每個人輪流取走任意一張牌和比它小的所有牌,最后誰取走最后一張牌,誰贏。要求預測游戲結果,結果必須是兩個人發揮最好的情況。
是兩個人輪流取,且C先取,
來分析博弈論:
以一列數字來分析(默認為從小到大排列):a1,a2,a3,a3,a3,a4,a4,a5,a6,a7.....an-1,an.
C先來,那么C每次肯定要制定自己盡可能贏的方式來取牌。當an有奇數張的時候,可以推斷出C肯定是最終的贏家。C就會按照這種方案來搞,要是an是偶數張的牌的話C在按照上面的方案執行最終就回輸掉了,那么與之進行相替換的方案就是看看數值大小為an-1牌的個數,要是其為奇數的話,按照上面的方案來執行 就會看到C會吧數值為an-1及其以下的牌取完,那A就去偶數個數的an第一張。接下來C面對的就是奇數個數的an,最終贏。要是an-1牌張數是也是偶數的時候的呢,那么我們就接著an-2......a1的張數。當遇到奇數個數C就開始搞,要都是偶數,那就人品不好了,說明C必輸,(C抽取任意一張之后,與之同樣聰明的A也會利用上面C的規則進行來取勝)。
總結得到,當遇到一個牌數為奇數張的時候C就會取勝,而且是必勝。只有所有的數都是偶數的時候才會輸。
這樣分析出來的就是最優方案。
#include<iostream> using namespace std; int a[100005],b[100005]; int main() {int n,cnt=0;cin>>n;for(int i=0; i<n; i++)cin>>a[i],b[a[i]]++;for(int i=0; i<n; i++)if(b[a[i]]%2){cout<<"Conan"<<endl;return 0;}cout<<"Agasa"<<endl;return 0; }
總結
以上是生活随笔為你收集整理的Conan and Agasa play a Card Game codeforce的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 3104 Drying
- 下一篇: Conan and Agasa play