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; }