B题 咕咕咚想吃饭
题目描述:
题目描述
咕咕东考试周开始了,考试周一共有n天。 他不想考试周这么累,于是打算每天都吃顿好的。他决定每天都吃生煎,咕咕东每天需要买ai个生煎。但是生煎店为了刺激消费,只有两种购买方式:①在某一天一 次性买两个生煎。 ②今天买一个生煎,同时为明天买一个生煎, 店家会给一个券,第二天用券来拿。没有其余的购买方式,这两种购买方式可以用无数次但是咕咕东是个节俭的好孩子,他考试结束就走了,不允许考试结束时手里有券。咕咕东非常有钱,你不需要担心
咕咕东没钱,但是咕咕东太笨了,他想问你他能否在考试周每天都能恰好买ai个生煎。
输入格式
输入两行,第- -行输入- 个正整数n(1 <=n <= 10000),表示考试周的天数。
第二行有n个数,第i个数a; (0 <= a; <= 10000)表示第i天咕咕东要买的生煎的数量。
输出格式
如果可以满足咕咕东奇怪的要求,输出"YES",如果不能满足,输出"NO"。(输出不带引号)
样例:
输入:
4
1 2 1 2
输出:
YES
解题思路:
理解题意得:只有两种购买方式,
①一次性购买两个的,购买完之后数量还是偶数,不能解决数量为奇数的情况,
②则,如果数量出现奇数只能选择第二种购买方式,如果选择这种购买方式,则不仅当天的需要购买数减一,后一天的购买数也需要减一
注意:在遍历减一的时候,需要留意当购买数量减为负数时则发生了错误,不能购买!!!
还有判断条件:如果最后一天和倒数第二天奇偶性不相同时,则购买也不成功,(若都为偶数,则都可以选择第一种购买方式,若都为奇数,则选择第二种购买方式之后,都变成了偶数,情况同上。如果一奇一偶的话,则无论怎样选择都买方式都不可以
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
int j=0;
for(int i=0;i<n-1;i++)
{
if(a[i]%2==1)
{
a[i]--;
a[i+1]--;
if(a[i+1]<0) j=1;
}
}
if((a[n-1]%2==a[n-2]%2)&&a[n-1]>=0&&j==0) cout<<"YES";
else cout<<"NO";
}