題目翻譯網站: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;
}