設a
aa表示先手總共取的個數,sod
ds_
sodd
表示奇數項的數目,sev
en
s_se
ven
表示偶數項的數目。
首先我們分析後手取的個數亦為a
aa,即n−k
n-kn−
k為偶數的情況:
注意到若後手取最後乙個時,sod
d,se
ve
n>
0s_,s_>0
sodd,
seve
n>
0,則後手必然勝利,因為他可以根據當前情況調整取哪乙個。由此,當a
na an時,後手必勝。更進一步,若min =sod dmin\,s_\}=s_ min=so dd,則後手直接取完奇數項,使得剩餘項的和必然為偶數,後手必勝; 所以只需要考慮min =sev en min\,s_\}=s_ min=se ven 的情況: 設a =s oddm od2, b=se venm od 2a=s_\mod 2,b=s_\mod 2 a=sodd mod 2,b= seve nmo d2,當a=b =0 a=b=0 a=b= 0時,因為a≥m in a\ge min\,s_\} a≥mi n,後手直接取完偶數項,剩餘必然還要取偶數個奇數項,則最終結果必然為偶數,後手勝; 當a =b =1 a=b=1 a=b= 1時,後手直接取完偶數項,剩餘必然還要取奇數個奇數項,則最終結果必然為偶數,後手勝; 當a =0 ,b=1 a=0,b=1 a=0,b= 1或a=1, b= 0a=1,b=0 a=1,b= 0時,先手直接取完偶數項,則剩餘必然還要取偶數個或奇數個奇數項,最終結果必然為奇數,先手勝。 n −k n-kn− k為奇數的情況用相同的方法分析即可,不再贅述。#include#include#include#include#include#includeusing namespace std;
#define clr(a) memset(a,0,sizeof(a))
//--container
//--
typedef long long ll;
int ar[2],n,k;
bool cl()
else
}return 1;
};int main();
51 Nod 1430 奇偶遊戲 博弈
基準時間限制 1 秒 空間限制 131072 kb 分值 160 難度 6級演算法題 收藏 關注 有n個城市,第i個城市有ai個人。daenerys和stannis是兩個惡魔。他們在玩乙個遊戲,他們輪流去破壞城市。每一輪破壞乙個城市並殺光裡面所有的人。直到剩下k個城市為止。如果最後剩下的總人數是偶數...
51nod 硬幣遊戲
有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況也算是相交 有時候不會。請你來計算一下拋一次硬幣之後,該硬幣和直線相交數目的期望。...
51nod 1390 遊戲得分
原題鏈結 1390 遊戲得分 topcoder 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 a與b兩人玩乙個遊戲,這個遊戲有若干個回合 可能0回合 遊戲的回合依次標號為1,2,3,4.你不需要關心遊戲的內容,現在只要知道第i回合勝者會獲得2 i 1分,每回合遊...