求教usaco的一道题Milking Cows实在不知道错哪了
[code=C/C++][
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int*)a-*(int *)b;
}
int a[1000001][2]={0},b[1000001];
int main()
{
int sum1,sum2,max1=0,max2=0,i,x,y,max=0,cont,k,p,q,n;
scanf("%d",&n);
for(i=0,k=0;i<n;i++)
{scanf("%d %d",&x,&y);
if(a[x][1]==0)
b[k++]=x;
a[x][0]++;
a[x][1]=1;
if(a[y][1]==0)
b[k++]=y;
a[y][0]--;
a[y][1]=1;
if(y>max)
max=y;
}
qsort(b,k,sizeof(int),cmp);
max1=b[0];
q=0;
for(i=0,cont=0;i<k;i++)
{if(a[b[i]][0]>0)
{if(cont==0)
{p=b[i];
sum1=p-q;
if(sum1>max1)
max1=sum1;
}
cont+=a[b[i]][0];
}
else if(a[b[i]][0]<0)
{
cont+=a[b[i]][0];
if(cont==0)
{q=b[i];
sum2=q-p;
if(sum2>max2)
max2=sum2;
}
}
}
printf("%d %d\n",max2,max1);
return 0;
}
]
a[i][0]是用来记录是开始时间还是结束时间的,是开始时间a[i][0]就会加1表示有一个人从这里开始工作,
同一时间内有几人工作由cont记录,当有人结束工作的时候a[y][0]就会减cont运行到这里就会减少.cont=0的地方就是没人工作的区域.
[解决办法]
三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300时刻(从5点开始计时,秒为单
位)给他的牛挤奶,一直到1000时刻。第二个农民在700时刻开始,在 1200时刻结束。第三个农民在
1500时刻开始2100时刻结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300时刻到1200
时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300时刻(从1200时刻到1500时刻)。
这是原题吗?我没看明白意思。要求输入N个农民,而题这里只给出三个,且没有一个依次类推的过程。
第三个农民在2100时刻结束,而最长的无人挤奶的时刻为1200时刻到1500时刻,这不是已经定了吗?