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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【结论】游戏(jzoj 1984)

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【结论】游戏(jzoj 1984) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

游戲

jzoj 1984

題目大意:

有很多個點,兩個人每次可以取走2k2^k2k(k是一個自然數,可以自己選)個點,取走最后一個點的人勝利,現在你先選,問你是否能贏(能贏輸出MaoLaoDa will win.,不能贏輸出King will win.),如果可以贏,第一步最少拿幾個點

輸入樣例#1

8 4 2

輸出樣例#1

MaoLaoDa will win. 2 MaoLaoDa will win. 1 MaoLaoDa will win. 2

輸入樣例#2

3 8 2

輸出樣例#2

King will win. MaoLaoDa will win. 2 MaoLaoDa will win. 2

數據范圍

0<n<10^1000002

解題思路:

我們設f[i]f[i]f[i]為現在還剩i個點,先拿是否可贏,我們可以得出f[i]=?f[i?xk]f[i]=-f[i-x^k]f[i]=?f[i?xk],我們稍微用手推一下可以發現序列:
···
1,1,-1,1,1,-1,1,1,-1,1,1,-1,1,1,-1……
···
不難發現,可以整除3的都是-1,其它都是1
然后我們還可以發現可以贏時,第一步就是整除3的余數,然后因為數據太大,我們可以用整除3的性質:把所有位置上的數字加在一起,除以3的結果和一開始一樣

代碼:

#include<cstdio> #include<string> #include<cstring> #include<iostream> using namespace std; int s; int read() {char x=getchar();int d=0;while (x<'0'||x>'9') x=getchar();while (x>='0'&&x<='9') d+=x-48,x=getchar();//數位相加return d; } int main() {for (int i=1;i<=3;++i){s=read();if (s%3==0) printf("King will win.\n");//判斷else printf("MaoLaoDa will win.\n%d\n",s%3);//余數}return 0; }

總結

以上是生活随笔為你收集整理的【结论】游戏(jzoj 1984)的全部內容,希望文章能夠幫你解決所遇到的問題。

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