Before an Exam

Before an Exam
明天皮特将要考生物。他并不很喜欢生物,但在 d 天前他得知他将不得不参加此次考试。皮特严厉的父母勒令他立即复习,因此他在第 i天将需要学习不少于 minTime小时,不多于 maxTime小时。他们同时警告皮特:考试前一天,他将被检查他复习的完成情况。因此,今天皮特的父母会要求他展示他考前复习的学习时间表。然而,他只记录这 dd天以来他复习所用的总计用时 sumTime小时.现在他希望知道他能否给他的父母展示一份时间表,包含 d个数,每个数 schedule表示皮特第 i 天在复习生物上的用时(单位为小时),并应满足上文提及的要求。

如果有解,在单独一行输出 YES,换行,输出任意一种满足上文要求的解。如果无解,在单独一行中输出 NO。

这个题首先把最小时间和最大时间分别加起来,与sumtime比较,在之间为“YES”,否则为“NO”。然后先把每个最小时间给他们,然后从第一个开始一次把做大值给他们,直到sumtime为0.

#include<bits/stdc++.h>
using namespace std;

int maxi[50],mini[50],ans[50];

int main()
{
	int n,s,maxs=0,mins=0;
	cin>>n>>s;
	for(int i=0; i<n; i++)
	{
		cin>>mini[i]>>maxi[i];
		mins+=mini[i];
		maxs+=maxi[i];
	}
	
	if(s>=mins&&s<=maxs) cout<<"YES"<<'\n';
	else
	{
		cout<<"NO";
		return 0;
	}
	
	s-=mins;
	for(int i=0; i<n; i++)
		if(s-(maxi[i]-mini[i])>0) 
		{
			s-=maxi[i]-mini[i];
			ans[i]=maxi[i];
		}
		else
		{
			ans[i]=mini[i]+s;
			s=0;
		}
	for(int i=0; i<n; i++) cout<<ans[i]<<' ';
	return 0;
}

萧杰

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值