咕咕东想吃饭

问题描述

咕咕东考试周开始了,考试周一共有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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章