日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ - 2348 Euclid's Game(博弈)

發布時間:2024/4/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ - 2348 Euclid's Game(博弈) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出初始的兩個數字,每一次操作都要在規則下進行:令較大的數減去任意倍較小的數,必須保證不能出現負數,先減到零者獲勝,問誰能獲勝

題目分析:這個題目說是博弈我感覺更像是找規律,我們來分析一下這個題目

首先我們設(a,b)中b永遠比a大,那么分為兩種情況:

  • 當a<b&&2*a>b時,只能進行一種操作,即b-=a,模擬即可
  • 當a<b&&2*a<b時,b有至少一種操作可以選擇了,我們設此時b最多可以減去x倍的a,那么我們不妨先令b減去(x-1)倍的a:
  • 在b減去(x-1)倍的a之后,因為此后的b仍然大于a,所以接下來的操作必然只有再讓b減去a這一種操作,就回到了第一種討論的情況之中,如果當前情況為必敗狀態的話,那么原狀態(a,b)就是必勝態
  • 接上條所述,若在b減去(x-1)倍的a之后,當前狀態變為了必勝狀態的話,那么就意味著一開始b減去x倍的a是必敗狀態,那么我們大可在一開始就減去x倍的a即可
  • 綜上所述,我們可以模擬整個過程,直到出現了結果,或者出現了b>2*a的狀態就可以停止了,若b>2*a之后,先手就可以操控整個游戲的局面了,所以此時肯定是先手必勝

    代碼:

    #include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=4e5+100;int main() { // freopen("input.txt","r",stdin);int a,b;while(scanf("%d%d",&a,&b)!=EOF&&a+b){int ans=0;while(1){if(a>b)//保證b>aswap(a,b);if(b%a==0||b-a>a)break;b-=a;ans^=1;if(a>b)swap(a,b);}if(ans)printf("Ollie wins\n");elseprintf("Stan wins\n");} return 0; }

    ?

    總結

    以上是生活随笔為你收集整理的POJ - 2348 Euclid's Game(博弈)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。