CSP M1 B 咕咕東想吃飯

2021-10-04 03:59:37 字數 1564 閱讀 1054

咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買

a[i]個生煎。但是生煎店為了刺激消費,只有兩種購買方式:①在某一天一次性買兩個生煎。②今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二天用券來拿。沒有其餘的購買方式,這兩種購買方式可以用無數次,但是咕咕東是個節儉的好孩子,他考試結束就走了,不允許考試結束時手裡有券。咕咕東非常有錢,你不需要擔心咕咕東沒錢,但是咕咕東太笨了,他想問你他能否在考試周每天都能恰好買a[i]個生煎。

輸入兩行,第一行輸入乙個正整數n

(1<=n<=100000)(1<=n<=100000),表示考試周的天數。

第二行有n個數,第i個數a[i](0<=a[i]<=10000)表示第i天咕咕東要買的生煎的數量。

如果可以滿足咕咕東奇怪的要求,輸出"yes",如果不能滿足,輸出「no」。(輸出不帶引號)

41 2 1 2

yes存在那麼一種方案,咕咕東第1天選擇方案②,那麼他第1天可以吃1個生煎

第2天再選擇方案②,手上又有一張第1天買的卷,那麼他第2天可以吃2個生煎

第3天不用額外買,手上有一張第2天買的卷,那麼他第3天可以吃1個生煎

第4天選擇方案①,一下子買2個生煎,那麼他第4天可以吃2個生煎

31 0 1

no資料點

n (上限)

a[i] (上限)

1,210

103,4,5

1000

106,7

1010000

8,9,10

100000

10000

貪心策略:優先順序:券》方案1>方案2

將此貪心策略用於eat()函式中。

每次使用temp=a[i]-ticket;temp<0則返回false,如果temp>0,則根據temp的奇偶來判斷,若為奇數,則ticket=1,若為偶數,則ticket=0,進入下一次遞迴,直到考試周結束,此時,若ticket>0,則返回false,(考試周結束不可留券),ticket=0,則返回true。

#include

#include

#include

#include

using

namespace std;

bool

eat(

int*

,int

,int

,int);

intmain()

bool

eat(

int a,

int num,

int ticket,

int n)

if(a[num]

return

false

;int temp=

(a[num]

-ticket)%2

;if(temp==0)

return

eat(a,num+1,

0,n)

;else

return

eat(a,num+1,

1,n)

;}

CSP M1 B咕咕東想吃飯

考試周共有n天,每天需要買ai個生煎,只有兩種購買方案,一是某一天一次性買兩個,二是今天買乙個,同時為明天買乙個,店家給乙個券,第二天用券來拿。同時考試周結束時不允許手上有券。請給出是否每天都能恰好買ai個生煎。如果第i天要買的ai為偶數則可以選擇方案一購買,且對其他天不產生影響,若ai為奇數則選擇...

CSP M1 B 咕咕東想吃飯

生煎店有兩種購買方式 某一天一次性買兩個生煎 今天買乙個生煎,同時為明天買乙個,店家給一張券,第二天用券來拿。考試周有n天,給出每天咕咕東要買的生煎數,計算是否有滿足要求的購買方式。要求 每一天可以無限多次執行任何一種購買方式 前一天的券必須在第二天全部用完 n天後不能有剩餘的券 第一行 整數n,表...

CSP M1 B 咕咕東想吃飯

csp m1 b 咕咕東想吃飯 題目描述 咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買a i個生煎。但是生煎店為了刺激消費,只有兩種購買方式 在某一天一次性買兩個生煎。今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二...