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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hakase and Nano(博弈)

發布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hakase and Nano(博弈) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


題意:有n堆石頭,每堆石頭有a[i]個。H和N兩個人輪流拿,每人最少拿1個。1代表H先拿,2代表N先拿。問H是否會贏。H每一回合會拿兩次,但是N只能拿一次。
對于H先拿的情況,如果他可以拿(代表這個堆目前不為空),他一定會盡力改變自己現在的處境。那么什么時候他就改變不了了呢?就是拿完這一堆就沒有了的時候。即這一堆的石頭數目為1的時候。如果n堆石子,每堆只有一個石頭,那么什么時候才是H先拿的必敗態呢?就是n%30的時候。這樣無論H怎么拿都不能贏。其余的時候就是H的必勝態。
對于N先拿的情況,極限情況也是石頭個數為1的時候。N先拿,對于H來說,之要是N拿完之后,不是H的必敗態,H就可以贏了。那就討論N拿一次成為H必敗態的情況。
①n1,無論怎么拿,H都輸。
②設石頭數目為1的堆有sum個,sumn并且n%31,這樣無論怎么拿,H都輸。
③設石頭數目為1的堆有sum個,sumn-1&&n%31,N可以把不是1的那一堆拿完,而后就是H的必敗態。
④設石頭數目為1的堆有sum個,sumn-1&&n%30,N把不是1的那一堆拿成1,而后就是H的必敗態。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=1e6+100; ll a[maxx]; int n,k;inline int read() {char ch = getchar(); int x = 0, f = 1;while(ch < '0' || ch > '9') {if(ch == '-') f = -1;ch = getchar();} while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0';ch = getchar();} return x * f; }int main() {int t;t=read();while(t--){n=read();k=read();int sum=0;int sum2=0;for(int i=1;i<=n;i++) {a[i]=read();if(a[i]==1) sum++;if(a[i]==2) sum2++;}if(k==1){if(n%3==0&&sum==n) puts("No");else puts("Yes");}else {int flag=1;if((sum==n-1&&n%3==0)||(n==1)||(sum==n&&n%3==1)||(sum==n-1&&n%3==1)) puts("No");else puts("Yes");}} }

博弈就是要冷靜思考,思考兩小時,寫題五分鐘。
努力加油a啊,(o)/~

總結

以上是生活随笔為你收集整理的Hakase and Nano(博弈)的全部內容,希望文章能夠幫你解決所遇到的問題。

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