题目翻译网站:http://www.nocow.cn/index.php/USACO_Training
这道题的解题思想应该从这一节的主题穷举算法上入手
顾名思义,就是判断每一秒是否有人在挤奶。
既然是穷举,所以就不用担心挨个扫一遍会超时的问题。
写到这里都知道怎么做了吧。
初学者一定要按着每一节的主题来思考算法,否则会走很多弯路
#include<stdio.h>
#include<string.h>
#define maxn 1000010
int x[maxn];
int main()
{
int i,j,a=0,b=0,n,m1,m2,sum_Y=0,sum_N=0,tmp_Y=0,tmp_N=0;
m1=maxn;
m2=0;
//全部清零
memset(x,0,maxn);
freopen("milk2.in","r",stdin);
freopen("milk2.out","w",stdout);
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d%d",&a,&b);
//m1,m2记录最终的起点和终点
if(a<m1)m1=a;
if(b>m2)m2=b;
//把有人挤奶的区段置1
for(j=a;j<b;j++)
{
x[j]=1;
}
}
//扫一遍整个数组
for(i=m1;i<m2;i++)
{
if(1==x[i])
{
tmp_N=0;
tmp_Y++;
if(tmp_Y>sum_Y)
{
sum_Y=tmp_Y;
}
}
if(0==x[i])
{
tmp_Y=0;
tmp_N++;
if(tmp_N>sum_N)
{
sum_N=tmp_N;
}
}
}
printf("%d %d\n",sum_Y,sum_N);
return 0;
}