description:
有M(M为偶数)头奶牛,每头奶牛有一个产奶量,将这些奶牛两两配对,每对奶牛的产奶的时间为两头奶牛产奶量的总和。现在这M/2对奶牛同时产奶,问所需的最短时间是多少 M保证为偶数
solution:
贪心。
将产奶量最少的和最多的匹配,最后取最大的时间即可
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct ben
{
int x,y;
}a[100005];
bool cmp(ben s,ben t)
{
return s.y<t.y;
}
int main()
{
int ans=0,n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+1+n,cmp);
int i=1,j=n;
while(i<=j)
{
ans=max(ans,a[i].y+a[j].y);
if(a[i].x>a[j].x)
{
a[i].x-=a[j].x;
j--;
}
else if(a[i].x<a[j].x)
{
a[j].x-=a[i].x;
i++;
}
else
{
i++;
j--;
}
}
printf("%d",ans);
return 0;
}