Week 4 CSP M1 咕咕東想吃飯

2021-10-04 02:15:23 字數 1626 閱讀 2011

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

input

輸入兩行,第一行輸入乙個正整數n(1<=n<=100000)表示考試周的天數。

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

output

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

4

1 2 1 2

樣例輸出1

yes
樣例輸入2

3

1 0 1

樣例輸出2

no
剛開始做題的時候像這道題覺得如果一天吃的生煎數很大的話,選擇的方案也很多,比如多次選擇第二種方案,這樣第二天手中就有多張券,又考慮到券能不能疊加使用…然後越想越複雜?

結束了之後討論一下才發現其實根本不用想那麼多,只需要判斷每天要買的生煎數的奇偶,如果奇數,那就選擇一次第二種方案來湊,這樣看來大體思路就是:

採用乙個flag標記一天過去後手中有沒有券,初始為0,表示沒有券,遍歷每天的生煎數;

如果為奇數,手中沒有券,那麼當天買一張券;

如果為奇數,手中有券,那麼全部選擇第一種方案;

如果為偶數,手中有券,當天買一張券;

如果為偶數,手中沒有券,那麼全部選擇第一種方案;

全部遍歷完成後,判斷手中是否有券,即flag的值,如果為1,那麼輸出「no」,如果為0,那麼輸出「yes」

這道題主要考察的是是否存在一種方案,使得最後手中沒有券,也就是說只需要判斷有沒有一種可行方案,而不需要找出具體怎麼實施,開始我的思路陷於這些方案的具體實施步驟,導致考慮的越來越多,還是要讀懂題意,然後總結出來規律就行了?

#include

using

namespace std;

intmain()

int flag=0;

//記錄手中是否有券

for(

int i=

0;i1;i++)}

if(a[i]%2

==1)//當天生煎數為奇數

if(flag==1)

//手中有券 }}

if(flag==1)

cout<<

"no"

cout<<

"yes"

<}

Week4 CSP M1 B 咕咕東想吃飯

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

Week4 CSP M1 B 咕咕東想吃飯 模擬

演算法 思路分析 咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買ai個生煎。但是生煎店為了刺激消費,只有兩種購買方式 在某一天一次性買兩個生煎。今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二天用券來拿。沒有其餘的購買...

CSP M1 B咕咕東想吃飯

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