第一次 csp考试模拟题 B题

B题 咕咕咚想吃饭

题目描述:
题目描述
咕咕东考试周开始了,考试周一共有n天。 他不想考试周这么累,于是打算每天都吃顿好的。他决定每天都吃生煎,咕咕东每天需要买ai个生煎。但是生煎店为了刺激消费,只有两种购买方式:①在某一天一 次性买两个生煎。 ②今天买一个生煎,同时为明天买一个生煎, 店家会给一个券,第二天用券来拿。没有其余的购买方式,这两种购买方式可以用无数次但是咕咕东是个节俭的好孩子,他考试结束就走了,不允许考试结束时手里有券。咕咕东非常有钱,你不需要担心
咕咕东没钱,但是咕咕东太笨了,他想问你他能否在考试周每天都能恰好买ai个生煎。

输入格式
输入两行,第- -行输入- 个正整数n(1 <=n <= 10000),表示考试周的天数。
第二行有n个数,第i个数a; (0 <= a; <= 10000)表示第i天咕咕东要买的生煎的数量。

输出格式
如果可以满足咕咕东奇怪的要求,输出"YES",如果不能满足,输出"NO"。(输出不带引号)

样例:
输入:
4
1 2 1 2
输出:
YES

解题思路:
理解题意得:只有两种购买方式,
①一次性购买两个的,购买完之后数量还是偶数,不能解决数量为奇数的情况,
②则,如果数量出现奇数只能选择第二种购买方式,如果选择这种购买方式,则不仅当天的需要购买数减一,后一天的购买数也需要减一
注意:在遍历减一的时候,需要留意当购买数量减为负数时则发生了错误,不能购买!!!
还有判断条件:如果最后一天和倒数第二天奇偶性不相同时,则购买也不成功,(若都为偶数,则都可以选择第一种购买方式,若都为奇数,则选择第二种购买方式之后,都变成了偶数,情况同上。如果一奇一偶的话,则无论怎样选择都买方式都不可以

代码如下:

#include
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";
}

你可能感兴趣的:(第一次 csp考试模拟题 B题)