Week4--CSP模擬--B - 咕咕東想喫飯

題目描述

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

輸入

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

輸出

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

樣例輸入

  4
4 0 0 3

樣例輸出

  NO

思路

綜述

這個題同A題一樣也是一道CSP的大模擬題,這道題比A題更高了一個檔次,也就是說建模出來的模型要複雜一些,但是也沒有用到近期學的比較難點的算法。
模擬這個場景也並不是很難想,可以用到奇數和偶數來思考;
需要明確一下幾點:
1、到達第i天,要麼沒有上一天的優惠券,要麼只有一張優惠券;
2、接下來思考,分一下三種情況:
1)今天不需要生煎,但是有優惠券,所以直接輸出NO,退出結束。要麼沒有優惠券,則下一天沒有優惠券,到下一天;
2)今天加上上一天的優惠券(可能是0或1不可能是其他值)是偶數,則下一天沒有優惠券,到下一天;
3)今天加上上一天的優惠券(可能是0或1不可能是其他值)是奇數數,則下一天有1張優惠券,到下一天;
3、最後一天要麼沒有優惠券是要偶數個生煎,要麼是奇數個生煎而且有個優惠券;
如果中途沒有退出,則最後輸出YES,表示可以滿足這位小朋友的特殊要求;

過程

Step1:

初始化:
flag用於記錄上一天是否有優惠券留下,以及是否向下一天發放優惠券;

	for(i=0;i<n;i++)
	cin>>a[i];
	int flag=1;
Step2:

更新今天的需要生煎數目

		if(juan!=0)//判斷是否有優惠券
		a[i] = a[i]-1;

分支3個:
分支1:
今天需要的生煎數小於0,出錯誤,退出;
今天是最後一天,但是今天需要奇數個生煎,出錯誤,退出;

		if(a[i]<0 || (i==n-1 && a[i]%2==1 )){
			cout<<"NO";
			flag=0;
			break;
		}

分支2:
今天需要奇數個生煎,所以向下一天發放一個優惠券;
continue;

		if(a[i]%2==0) {
			juan=0;
			continue;
		}

分支3:
今天需要偶數個生煎,所以不向下一天發放優惠券;
continue;

		else if(a[i]%2==1){
			juan=1;
			continue;
		}

總結

這道模擬題,建模之後雖然沒有用到算法知識,但是用到了奇數偶數的關係來解題;
突然感覺就像以前學一段時間的數學就會出現應用題一樣。然後需要從應用題中建模出數學表達式。

代碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	int n,i,now;
	int juan=0;
	int *a;
	cin>>n;
	a = new int[n];
	for(i=0;i<n;i++)
	cin>>a[i];
	int flag=1;
	for(i=0;i<n;i++){
		if(juan!=0)
		a[i] = a[i]-1;
//		今天需要的生煎數小於0,出錯誤,退出;
//今天是最後一天,但是今天需要奇數個生煎,出錯誤,退出;
		if(a[i]<0 || (i==n-1 && a[i]%2==1 )){
			cout<<"NO";
			flag=0;
			break;
		}
		//今天需要偶數個生煎,所以不向下一天發放優惠券;
		if(a[i]%2==0) {
			juan=0;
			continue;
		}
		//今天需要奇數個生煎,所以向下一天發放一個優惠券;
		else if(a[i]%2==1){
			juan=1;
			continue;
		}
	}
	if(flag==1){
		cout<<"YES";
	}
	delete []a;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章