USACO Milking Cows

来源:互联网 发布:超级大乐透数学算法 编辑:程序博客网 时间:2024/05/16 12:34

【题意】给N个喂养奶牛的开始时间和结束时间,求最长的喂养时间段和最长的没有喂养的时间段

【分析】

没啥好分析的......

对于每个[l,r],是指喂养从l到r-1的时间,这是最关键的,不过题意比较模糊啊。

知道了就好办了,直接求连续的就是了。

模拟,主要要求编程能力高,也就是细节的把握。

在求连续的时候,有两种写法,一种是每循环一次求出一段,另一种是循环长度次每次分别求,两种都可以写。

【代码】

/*

ID:y2007031

PROG:milk2

LANG:C++

*/


#include <cstdio>

#include <cstring>

#include <cstdlib>


using namespace std;


int n,rtst,ltst=1000001;

int v[1000001],rept,rhas;


int max(int i,int j)

{

return i>j?i:j;

}


int min(int i,int j)

{

return i<j?i:j;

}


int main(void)

{

int x,y;

scanf("%d",&n);

for (;n--;)

{

scanf("%d%d",&x,&y);

ltst=min(ltst,x);

rtst=max(rtst,y);

for (int i=x;i<y;i++) v[i]++;

}

int has=0,empty=0;

for (int i=ltst;i<rtst;i++)

{

if (v[i])

{

has++;

rhas=max(rhas,has);

}

else has=0;

if (!v[i])

{

empty++;

rept=max(rept,empty);

}

else empty=0;

}

printf("%d %d\n",rhas,rept);

return 0;

}

【总结】

①对于题意的把握,从哪一刻到哪一刻是要先明白的

②实现连续段的两种方法,一种在循环里面求,第二种在循环求

0 0