题解 P1204 【[USACO1.2]挤牛奶Milking Cows】

· · 题解

一道简单的题目

思路很简单,可以直接把整个时间看成一个区间,不多说直接给代码

#include<bits/stdc++.h>
inline int read(){//快速读入,不解释 
    int x=0;
    char c=getchar();
    while(c>'9'||c<'0')
        c=getchar();
    while(c>='0'&&c<='9'){
        x=x*10+c-'0';
        c=getchar();
    }
    return x;
}
int a[10005];
int n,l,r,ml=1e9,mr=-1;//ml代表区间最小值,mr代表区间最大值 
ine ans1=-1,ans2=-1,max1=0,max2=0; 
int main(){
    memset(a,0,sizeof(a))//初始化,全部为0 
    n=read();//读入n 
    for(int i=1;i<=n;i++){
        l=read();
        r=read();
        ml=std::min(ml,l);//求出区间最大值 
        mr=std::max(mr,r);//求出区间最小值 
        for(int j=l;j<=r;j++)
            a[j]=1;//标记,将有人挤奶的时间赋值为1 
    }
    for(int i=ml;i<=mr;i++){
        if(a[i])max1++;//不停累加 
        else{
            ans1=std::max(ans1,max1);//求出最长的一直有人挤奶的时间长度 
            max1=0;//继续枚举 
        }
        if(!a[i])max2++;
        else{
            ans2=std::max(ans2,max2);
            max2=0;
        }
    }
    std::cout<<ans1<<" "<<ans2;//输出结果 
    return 0;//养成好习惯 
    //std::实际没什么用只是加快编译速度 
}

给个赞再走吧