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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2020年浙江理工大学新生赛 B Cly的博弈

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020年浙江理工大学新生赛 B Cly的博弈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注意:本文的代碼可以AC,但解釋可能有誤,思路僅供參考

Description
Cly很喜歡博弈,這天他和他的分身DD_BOND玩起了一個博弈游戲(本體當然是先手了),游戲規則如下,請你判斷誰能贏得游戲。
最初有一個數字n,每次操作可以選擇一個數字x滿足0<x<n,且n%x==0,接著用n-x替換原本數字,誰不能操作誰就輸了。
對于每次詢問如果先手能贏,你需要告訴cly第一步能選擇的最大x是什么,為了方便起見,你最后只需要告訴他所有詢問x的和就行了。

Input
第一行查詢數字q (1<=q<=1e5)
接下來q行每行輸入一個數字n (1<=n<=1e5)

Output
對于每次查詢如果先手勝,輸出clynb,否則輸出DD_BONDNB
最后輸出一個和sum

Sample Input
【樣例1輸入】

1 1

【樣例2輸入】

1 2

Sample Output
【樣例1輸出】

DD_BONDNB 0

【樣例2輸出】

clynb 1

題目分析:
選擇x∈(0,n),使n%x==0,然后n-=x,找不到這個x(不能操作)為輸

假設n=1:
第①步不能操作,先手輸

假設n=2:
①只能選擇x=1,n=2-1=1(到假設n=1)
②不能操作,先手贏

假設n=3:
①只能選擇x=1,n=3-1=2(到假設n=2)
②只能選擇x=1,n=2-1=1
③不能操作,先手輸

假設n=4:
①如果選擇x=1,n=4-1=3(到假設n=3)
②只能選擇x=1,n=3-1=2
③只能選擇x=1,n=2-1=1
④不能操作,先手贏

①如果選擇x=2,n=4-2=2(到假設n=2)
②只能選擇x=1,n=2-1=1
③不能操作,先手輸

可以再往下分析,得出結論:

如果先手可以使 n=1, 那么先手贏

奇數=1*奇數*······*奇數 偶數=1*(2^n)*(奇數 或 1)

n=n-x

所以

奇數只能變為偶數 偶數可以選擇讓它變為奇數

要使n=n-x=1,n原來必然為偶數
所以

先手遇到偶數必贏,否則必輸

所以

如果(輸入的值為偶數),判負 否則,第一步可選的最大x為n的最大奇因數

代碼如下:

#include<iostream> #include<cstdio> using namespace std; int main(){int q,n,sum=0;cin>>q;while(q--){scanf("%d",&n);//使用cin會TLE if(n%2==1) cout<<"DD_BONDNB\n";else{cout<<"clynb\n";while(n%2==0)n/=2;//n除以2,直到n為奇數 sum+=n;}}cout<<sum;return 0; }

總結

以上是生活随笔為你收集整理的2020年浙江理工大学新生赛 B Cly的博弈的全部內容,希望文章能夠幫你解決所遇到的問題。

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