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

    说明
    题目翻译来自NOCOW。
    USACO Training Section 1.2
    .
    .
    .
    .
    .
    .

    分析

    直接爆枚
    设一个数组来记录当前的时间点十分有人挤牛奶
    有则更新记录
    注意:结束时间是没有挤牛奶的!!!
    .
    .
    .
    .
    .
    .

    程序:
    #include<iostream>
    #include<string.h>
    #include<cstdio>
    using namespace std;
    int main()
    {
        int n,b,e,max1,max2;
        b=1000005;e=-1;
        max1=0;max2=0;
        bool a[1000005];
        memset(a,false,sizeof(a));
        cin>>n;
        int x,y;
        for (int i=1;i<=n;i++)
        {
            cin>>x>>y;
            if (x<b) b=x;
            if (y>e) e=y;
            for (int j=x;j<y;j++)
            a[j]=true;
        }
        int b1,e1;
        b1=0;e1=0;
        for (int i=b;i<e;i++)
        if (a[i]==true)
        {
            b1++;
            if (e1>max2) max2=e1;
            e1=0;
        } else
        if (a[i]==false)
        {
            e1++;
            if (b1>max1) max1=b1;
            b1=0;
        }
        if (b1>max1) max1=b1;
        if (e1>max2) max2=e1;
        cout<<max1<<' '<<max2;
        return 0;
    }
  • 相关阅读:
    Liskov替换原则
    OCP开放封闭原则
    SRC单一职责原则
    什么是敏捷设计
    [WCF编程]13.并发:服务并发模式
    [WCF编程]12.事务:服务事务编程(下)
    [WCF编程]12.事务:服务事务编程(上)
    [WCF编程]12.事务:Transaction类
    [WCF编程]12.事务:事务传播
    [WCF编程]12.事务:事务协议与管理器
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499963.html
Copyright © 2011-2022 走看看