题目大意:给定 n(n=2k) 个数,要求配成 k <script type="math/tex" id="MathJax-Element-22">k</script>对,使得每对和的最大值最小
肯定最大配最小,排序模拟就行了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 100100
using namespace std;
int n,ans;
pair<int,int> dq[M];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d%d",&dq[i].second,&dq[i].first);
sort(dq+1,dq+n+1);
int l=1,r=n;
while(l<r)
{
ans=max(ans,dq[l].first+dq[r].first);
int temp=min(dq[l].second,dq[r].second);
dq[l].second-=temp;
if(!dq[l].second)
++l;
dq[r].second-=temp;
if(!dq[r].second)
--r;
}
if(l==r)
ans=max(ans,dq[l].first+dq[r].first);
cout<<ans<<endl;
return 0;
}