(贪心+区间排序)CodeForces 813A-The Contest

以你之姓@ 2022-05-16 10:19 289阅读 0赞
  • (贪心+区间排序)CodeForces 813A-The Contest


  • 题目链接:A. The Contest

  • 思路:

给n道题及n道题每道完成需要的时间,和m个区间,题目只能在区间内提交,一次性提交题目不限制数目,求最短交完所有题目的时间

首先,题目全部完成所需时间是恒定的,所以只需计算出题目完成总时间,然后在区间中找一个最短的时间点把题目全部提交就好

区间用结构体表示,然后进行排序,按左区间升序排,左区间相同则按右区间升序

  • 代码:

    include

    include

    using namespace std;

    define MAX_SIZE 1005

    struct Period{

    1. int Begin;
    2. int End;

    };
    bool Mycmp(Period a,Period b) //区间自定排序
    {

    1. if(a.Begin==b.Begin)
    2. return a.End<b.End;
    3. else
    4. return a.Begin<b.Begin;

    }

    Period Time_List[MAX_SIZE];
    int main()
    {

    1. int n,m;
    2. int Solve_Time=0;
    3. int One_Time;
    4. int Ans=-1;
    5. cin>>n;
    6. for(int i=0;i<n;i++)
    7. {
    8. cin>>One_Time;
    9. Solve_Time+=One_Time; //计算做题总时间
    10. }
    11. cin>>m;
    12. for(int i=0;i<m;i++)
    13. cin>>Time_List[i].Begin>>Time_List[i].End;
    14. sort(Time_List,Time_List+m,Mycmp);
    15. for(int i=0;i<m;i++) //遍历区间
    16. {
    17. if(Time_List[i].Begin>=Solve_Time) //开始时间大,在区间头把题目全部提交
    18. {
    19. Ans=Time_List[i].Begin;
    20. break;
    21. }
    22. if(Time_List[i].End>=Solve_Time) //做题总时间在区间中
    23. {
    24. Ans=Solve_Time; //做完题马上提交
    25. break;
    26. }
    27. }
    28. cout<<Ans<<endl;
    29. return 0;

    }

发表评论

表情:
评论列表 (有 0 条评论,289人围观)

还没有评论,来说两句吧...

相关阅读

    相关 贪心-区间规划

    题目描述 有N项工作,每项工作分别在Si时间开始,在Ti时间结束。对于每项工作,你都可以选择参与与否。如果选择了参与,那么自始至终都必须全程参与。此外,参与工作的时间段不能重

    相关 区间覆盖(贪心

    题目描述 给定N个闭区间\[ai,bi\]以及一个线段区间\[s,t\],请你选择尽量少的区间,将指定线段区间完全覆盖。 输出最少区间数,如果无法完全覆盖则输出-1。

    相关 Codeforces 353E 贪心

    题意:给你一张有向图,第i条边连接i号点和(i + 1) % n号点,问最多可以选择多少个点,使得这些点互相不可达。 思路:容易发现,如果某个边的集合点的数目大于等于2,那么