10 24 牛客普及(四) 石子 題解

2021-10-25 05:19:09 字數 1631 閱讀 5463

ali

ce

alice

alic

e 和 bob

bobbo

b 從小就一起玩石子。

有一天,他們又想愉快的玩乙個石子遊戲。

一共有 n

nn 堆石子,第 i

ii 堆石子有 aiai

ai個,兩人輪流操作。

a li

ce

alice

alic

e 走先手,每個人每個回合只能對一堆石子進行操作,ali

ce

alice

alic

e 每次操作只能拿偶數個石子,bob

bobbo

b 每次操作只能拿奇數個石子, 每次操作至少拿走乙個石子,直到一方無法進行任何操作,無法操作的人失敗。

假設a li

ce

alice

alice與bob

bobbo

b都是絕頂聰明的,如果 ali

ce

alice

alic

e 可以獲勝,那麼輸出 yes

yesye

s,否則輸出 nono

no。多組資料。對於每組資料,第一行輸入乙個正整數 n

nn,第二行輸入 n

nn 個正整數,第 i

ii 個數表示 aiai

ai。對於每組資料,每行輸出乙個字串yes

yesye

s或no

nono

input 1

22 1

output 1

noinput 216

output 2

yes對於20%的資料,資料組數為1且n

nn=1

對於另外20%的資料,n

nn=1;

對於另外20%的資料,石子數都為1;

對於100%的資料n

nn的和小於1000000,石子數小於1000000000

乍一看,天那!模擬會炸哎

實則是到淼題

只有當n=1,且那一堆是偶數堆時

才輸出yes

yesye

s證明:

b ob

bobbo

b的最優策略:1.拿偶數堆 2.拿完一堆奇數堆

a li

ce

alice

alic

e的最優策略:拿完一堆偶數堆

偶數堆不斷在減少

所以a li

sa

alisa

alis

a會沒得拿

除非有且僅有一堆偶數堆

#include

#include

using namespace std;

int n,x;

int main()if

(sum==1&&n==1)

printf(

"yes\n");

else printf(

"no\n");

}return 0;

}

SDOI2008 石子合併 題解

題面 garsiawachs演算法專門解決石子合併問題 設乙個序列是a 0.n 1 每次尋找最小的乙個滿足a k 1 a k 1 的k,那麼我們就把a k 與a k 1 合併,並向前尋找乙個第乙個超過他們的和的數,把這個數插入到他後面 include define inc i,a,b for reg...

Luogu P1880 石子合併 題解報告

題目傳送門 題目大意 在乙個圓形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分。思路解析 首先是斷環為鏈,這題資料不大,沒什麼問題。說一下轉移方...

牛客IOI周賽20 普及組(題解)

b 移動撤銷 c 石頭剪刀布 d 夾縫中求和 題目分析 首先,完全數是可以打表的,完全數就是那麼幾個直接打表判斷,剩下的就是過剩數和不足數,那麼有乙個定理那就是奇數是不足數,偶數是過剩數,但是有乙個特例,那就是2835,他雖然是乙個奇數但是卻是過剩數,特殊判斷一下就行 include include...