• [USACO1.2]挤牛奶Milking Cows [离散]


    题目

         

    题目描述

    三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒。第二个农民在700秒开始,在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300秒到1200秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒到1500秒)。

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

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

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

    输入输出格式

    输入格式:

    Line 1:

    一个整数N。

    Lines 2..N+1:

    每行两个小于1000000的非负整数,表示一个农民的开始时刻与结束时刻。

    输出格式:

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

    输入输出样例

    输入样例#1: 复制
    3
    300 1000
    700 1200
    1500 2100
    
    输出样例#1: 复制
    900 300

    分析

        这道题可以用桶暴力过

       但为了练离散只好打了

       这道题他要统计最大值

       所以我用了flag标记了

       然后在之后统计得结果

    代码

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int x1[5020],x2[5020],x[10050];
     5 bool flag[15020];
     6 struct sb
     7 {
     8     int x1,x2;
     9 }a[5020];
    10 bool cmp(sb a,sb b)
    11 {
    12     return a.x1<b.x1?true:false;
    13 }
    14 int main ()
    15 {
    16     int n;
    17     cin>>n;
    18     for (int i=1;i<=n;i++)
    19     {
    20         cin>>a[i].x1>>a[i].x2;
    21         x[2*i-1]=a[i].x1;
    22         x[2*i]=a[i].x2;
    23     }
    24     sort(a+1,a+1+n,cmp);
    25     sort(x+1,x+1+2*n);
    26     int maxx=0,minn=0;
    27     for (int i=1;i<=2*n;i++)
    28     {
    29         for (int j=1;j<=n;j++)
    30         {
    31             if (x[i]>=a[j].x1&&x[i]<a[j].x2)
    32             {
    33                 flag[i]=1;
    34                 break;
    35             }
    36         }
    37     }
    38     int h=0;
    39     for (int i=1;i<=2*n;i++)
    40     {
    41         if (flag[i]==1)
    42            h+=x[i+1]-x[i];
    43         else
    44           {
    45               maxx=max(h,maxx);
    46               h=0;
    47           }
    48     }
    49     h=0;
    50     for (int i=1;i<=2*n;i++)
    51     {
    52         if (flag[i]==0)
    53            h+=x[i+1]-x[i];
    54         else 
    55         {
    56             minn=max(minn,h);
    57             h=0;
    58         }
    59     }
    60     cout<<maxx<<" "<<minn;
    61 }
    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.2.25
    Elementary Methods in Number Theory Exercise 1.2.14
    图解欧几里德算法
    图解欧几里德算法
    Elementary Methods in Number Theory Exercise 1.2.14
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    分享下多年积累的对JAVA程序员成长之路的总结
    android异常之都是deamon惹的祸The connection to adb is down, and a severe error has occured.
    TomatoCartv1.1.8.2部署时报错
    JavaScript浏览器对象之二Document对象
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10086642.html
Copyright © 2020-2023  润新知