您的位置:首页 > 其它

[USACO 1.2.1]挤牛奶

2013-01-22 12:26 225 查看
地址:http://hustoj.sinaapp.com/problem.php?id=1820

按开始时间排序,然后统计最长挤牛奶时间段和最长间隔段。快排又写错了一次......

#include<stdio.h>

int a[5000][2],n;

int ones(int l,int r)
{
int i=l,j=r,flag=0,key=a[l][0];
int t1,t2;
while(i<j)
{
if(0==flag)
{
if(a[j][0]<key)
{
t1=a[j][0];
t2=a[j][1];
a[j][0]=a[i][0];
a[j][1]=a[i][1];
a[i][0]=t1;
a[i][1]=t2;
flag=1;
}
else
{
j--;
}
}
else
{
if(a[i][0]>key)
{
t1=a[j][0];
t2=a[j][1];
a[j][0]=a[i][0];
a[j][1]=a[i][1];
a[i][0]=t1;
a[i][1]=t2;
flag=0;
}
else
{
i++;
}
}
}
return i;
}

void quick(int l,int r)
{
int mid;
if(l<r)
{
mid=ones(l,r);
quick(l,mid-1);
quick(mid+1,r);
}
}

int main()
{
int i,max1=0,max2=0,t1=0,t2=0,t[2];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&a[i][0],&a[i][1]);
}
quick(0,n-1);
t[0]=a[0][0];
t[1]=a[0][1];
max1=t1=t[1]-t[0];
for(i=1;i<n;i++)
{
if(a[i][0]<=t[1])
{
if(a[i][1]>t[1])
{
t1=t1+a[i][1]-t[1];
t[1]=a[i][1];
}
}
else
{
t1=a[i][1]-a[i][0];
t2=a[i][0]-t[1];
t[0]=a[i][0];
t[1]=a[i][1];
}
max1=t1>max1?t1:max1;
max2=t2>max2?t2:max2;
}
printf("%d %d\n",max1,max2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: