51nod 1430 奇偶遊戲

2021-09-09 06:25:54 字數 1536 閱讀 5744

設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

n​mo

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分,每回合遊...