CF 4B. Before an Exam

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

原文地址:https://www.cnblogs.com/Levi-0514/p/9042498.html