zoukankan      html  css  js  c++  java
  • [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 }
    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    centos7上以RPM方式安装MySQL5.6
    区别和详解:jQuery extend()和jQuery.fn.extend()
    jQuery笔记总结
    CSS Hack的一些知识
    12种不宜使用的javascript的语法
    64位Win7系统下vs2010调试无法连接oracle解决办法
    HashCode()与equals()深入理解
    Java ArrayList自动扩容机制
    Java基础知识
    MySQL的MVCC机制
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10086642.html
Copyright © 2011-2022 走看看