咕咕東想吃飯

問題描述

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

Input

輸入兩行,第一行輸入一個正整數n(1<=n<=100000)n(1<=n<=100000),表示考試周的天數。
第二行有n個數,第i個數ai0<=ai<=10000a_i(0<=a_i<=10000)表示第ii天咕咕東要買的生煎的數量。

Output

如果可以滿足咕咕東奇怪的要求,輸出"YES",如果不能滿足,輸出“NO”。(輸出不帶引號)

Sample input1

4
1 2 1 2

Sample output1

YES

Sample input2

3
1 0 1

Sample output2

NO

解題思路

\hspace{17pt}首先看看輸出NO的條件:最後手裏沒有券。注意題目說明了券只能第二天用,那第三天就會變成廢券,留在了手中。
\hspace{17pt}這個題需要對每天購買數量進行分析,數量分爲買1個,買2個和不買(因爲2個以上的都可以通過第一種消費方式將其買掉)。
\hspace{17pt}首先初始化條件是手中沒有券。
\hspace{15pt} 1.如果今天買一個,此時手中有券,那麼就用掉(不用掉就失效了,咕咕東手中就會有一張廢券)。如果沒有券,那麼使用第二種消費方式,就獲得了一張券。
\hspace{15pt} 2.如果今天不買,手裏沒有券沒事,但是如果手裏有券,這個券必定要浪費掉了,直接跳出。
\hspace{15pt} 3.如果今天買兩個,不用處理。因爲如果手裏沒有券,我們就用第一種消費方式買。如果有券,我們使用券,並且再使用第二種消費方式來買另外一個,我們就又獲得了一張券。這樣券的情況是不會發生變化的。
\hspace{16pt} 最後看看手裏有沒有券來輸出YES或NO。

完整代碼

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
using namespace std;

const int maxn=100000+10;
int n,a[maxn];
bool flag=false;//判斷此時是否有券

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin>>n;
    for (int i=1; i<=n; i++)
    {
        cin>>a[i];
        if(a[i]%2==1)//今天買奇數個
        {
            if(flag) flag=false;//手裏有券,現在沒了
            else flag=true;//手裏沒有券,現在有了
        }
        else if(a[i]==0 && flag) break; //今天不買,但是手裏有券
        //買偶數個不用管,有沒有券,券的狀態都不變
    }
    if(flag) cout<<"NO"<<endl;
    else cout<<"YES"<<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章