• C01——挤牛奶


    三个农民每天清晨 55 点起床,然后去牛棚给三头牛挤奶。

    第一个农民在 300300 秒 (从 55 点开始计时) 给他的牛挤奶,一直到 10001000 秒。第二个农民在 700700 秒开始,在 12001200 秒结束。第三个农民在 15001500 秒开始,21002100 秒结束。

    期间最长的至少有一个农民在挤奶的连续时间为 900900 秒 (从 300300 秒到 12001200 秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为 300300 秒 (从 12001200 秒到 15001500 秒)。


    你的任务是编一个程序,读入一个有 nn 个农民挤 nn 头牛的工作时间列表,计算以下两点(均以秒为单位):

    最长至少有一人在挤奶的时间段。

    最长的无人挤奶的时间段。(从有人挤奶开始算起)

    输入格式

    第一行一个正整数 nn

    接下来 nn 行,每行两个非负整数 l,rl,r,表示一个农民的开始时刻与结束时刻。

    输出格式

    一行,两个整数,即题目所要求的两个答案。

    输入输出样例

    输入 #1复制

    3
    300 1000
    700 1200
    1500 2100
    

    输出 #1复制

    900 300
    

    测试代码:

    10
    2 3
    4 5
    6 7
    8 9
    10 11
    12 13
    14 15
    16 17
    18 19
    1 20

    //

    1

    100 200

    1. #include
    2. #include
    3. long Max(long a,long b){
    4. return a>b?a:b;
    5. }
    6. struct Nod{
    7. long beg;
    8. long end;
    9. };
    10. int main(){
    11. int N;
    12. scanf("%d",&N);
    13. struct Nod x[N];
    14. if(N==0)printf("0 0");
    15. else{
    16. for(int i=1;i<=N;i++){
    17. scanf("%ld %ld",&x[i].beg,&x[i].end);
    18. }
    19. long Beg=x[1].beg,End=x[1].end;
    20. long w=End-Beg,f=0;//w最长工作时间,f最长休息时间
    21. for(int i=2;i<=N;i++){
    22. if(x[i].beg<=Beg){
    23. End=Max(End,x[i].end);
    24. w=Max(w,End-x[i].beg);
    25. }
    26. if(x[i].beg<=End&&x[i].beg>Beg){
    27. End=Max(End,x[i].end);
    28. w=Max(w,End-Beg);
    29. }
    30. else{
    31. w=Max(End-Beg,x[i].end-x[i].beg);
    32. f=Max(f,x[i].beg-End);
    33. Beg=x[i].beg;
    34. End=x[i].end;
    35. }
    36. }
    37. w=Max(w,End-Beg);
    38. printf("%ld %ld",w,f);
    39. }
    40. return 0;
    41. }

  • 相关阅读:
    spacy教程(持续更新ing...)
    【数据结构】树(六)—— 二叉平衡树(C语言版)
    Node.js精进(4)——事件触发器
    【Python】通过 Python 设置电脑代理端口
    球面近场多探头一致性校准方法研究
    【SpringBoot】配置文件分类
    基于图搜索的规划算法之A*家族(五):D* 算法
    基于ssm教学评价管理系统获取(java毕业设计)
    MySQL MHA
    离线数仓搭建_14_DWT数据构建
  • 原文地址:https://blog.csdn.net/m0_74161592/article/details/134518392