CF 4B. Before an Exam 点击打开链接
题意:快要考试了 你还有 n 天的时间一共要复习 m个小时,每天都有最小和最大复习时间。求,是否可能复习完。如果能,输出你的复习计划。
思路:由于每天有复习时间的限制,你每天的复习时间就必须在限制之内,判断能否复习完,只需将最小复习时间相加与总复习时间相加比较即可。如果可以复习完,就用总复习时间减去 最小复习时间之和 得x,然后每天先取最小复习时间 MInTime,如果x有剩余,则取 MInTime+t MinTime+t<MaxTime 然后x-=t。x==0之后,直接取MinTime即可。
#include <iostream>
using namespace std;
int MinTime[500],MaxTime[500];
int main()
{
int SumTime,Day,Max=0,Min=0;
cin>>Day>>SumTime;
for(int i=0;i<Day;i++){
cin>>MinTime[i]>>MaxTime[i];
Max+=MaxTime[i];
Min+=MinTime[i];
}
if(Max<SumTime)
cout<<"NO";
else if(Min>SumTime)
cout<<"NO";
else{
cout<<"YES"<<endl;
int x=SumTime-Min;
for(int i=0;i<Day;i++){
if(MinTime[i]+x>=MaxTime[i]){
cout<<MaxTime[i];
x=MinTime[i]+x-MaxTime[i];
}
else{
cout<<MinTime[i]+x;
x=0;
}
if(i<Day-1)
cout<<" ";
}
}
cout<<endl;
return 0;
}