CodeForces 731B-Coupons and Discounts

  • CodeForces 731B-Coupons and Discounts


大意是披萨店有两种折扣方式,一是一天买两个披萨二是一天一个披萨连续买两天,给定训练天数和每天训练队伍数(一个队伍一天吃一个披萨),在不多买的情况下问给定数据能否满足所有购买的披萨都能折扣

要么是两天内那两块披萨折扣,要么就一次买两块进行折扣

所以从第一天开始进行遍历

a.如果有落单的披萨,那么下一天必须抽出一块一起折扣,如果下一天不买披萨,不满足要求

b.该天披萨成对买,当天的披萨全都是获得折扣的

注意:需要把已经折扣完的披萨减掉

符合要求的结果:数组全部为0(因为减去的是获得折扣的披萨,为0表示全部披萨获得折扣)

  • 我跳进去的坑:

因为是遍历到最后一天,所以会出现一个问题,如果最后一天披萨数是单数,是不满足题目所要求的所有披萨都要折扣的,但是按我的思路就往后一天再抽一块披萨,但下一天没有初始化,导致bug

解决方法:把第n+1天训练队伍数设为0,防止最后一天单数个披萨错误判定

  • 代码:

#include<iostream>
#include<cstdio>
using namespace std;
#define MAX_SIZE 200005
int Pizza_num[MAX_SIZE];

int main()
{
	int n;
	while (cin >> n)
	{
		int Break_flag = 0;
		for (int i = 0; i < n; i++)
			scanf("%d", &Pizza_num[i]);
		Pizza_num[n] = 0;		//易错
		for (int i = 0; i < n; i++)
		{
			if (Pizza_num[i] == 0)
				continue;
			else
			{
				if (Pizza_num[i] % 2)
				{
					if (Pizza_num[i + 1] == 0)
					{
						Break_flag = 1;
						break;
					}
					Pizza_num[i + 1] -= 1;
				}
				Pizza_num[i] = 0;
			}
		}
		for (int i = 0; i < n; i++)
		{
			if (Pizza_num[i])
			{
				Break_flag = 1;
				break;
			}
		}
		if (Break_flag)
			cout << "NO" << endl;
		else
			cout << "YES" << endl;

	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值