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

 

posted @ 2018-12-08 10:06  Melted_czj  阅读(374)  评论(0)    收藏  举报
body { background-color:whitesmoke; } // 修改背景颜色为半透明 #home,#sideBarMain>div,#blog-sidecolumn>div>div,.catListView{ background-color:rgba(255,255,255,0); } // 修改其他边框的颜色