codeforces 731B Coupons and Discounts

/*
一开始并没有想清楚这题该怎么解出,走了许多弯路
我一开始以为此题的关键在于数组中的偶数元素,如果偶元素的后面还是偶元素,前一个偶元素就能当作0来处理;
后来又想,是不是前后两个数字,分别减去两者中的最小值
然后想来许多许多的角度
最后发现...还是我自己想得太多了,这题其实没那么麻烦,无非是,遇到偶数取余,遇到零判断下一个,若遇到奇数,先判断后面还有没有元素,没有则输出"NO"并退出循环,否则判断其后面是不是0.是0则输出"NO"并退出循环,否则当前判断的数组元素置0(之所以为0.是因为自减以后,肯定变成偶数了,偶数有一种优惠可用,那天的绝对可以买到).而它后面的元素自减...如此循环往复,直到遍历数组中所有的元素
*/



#include <bits/stdc++.h>
const int N = 200005;
int num[N];
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
		bool jud = true;
		for (int i = 0; i < n; i++)
		cin >> num[i];
		
		for (int i = 0; i < n; i++)
		{
			if (num[i] >= 2)
			num[i] %= 2;
			
			if (num[i] == 0)
			continue;
			
			if (i == n - 1)
			{
				jud = false; break;
			}
			else
			{
				if (num[i + 1])
				{
					num[i + 1]--;
					num[i] = 0;
				}
				else
				{
					jud = false; break;
				}
			}
		}
		if (jud) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}


原文地址:https://www.cnblogs.com/mofushaohua/p/7789486.html