BZOJ 4781 Usaco2017 Open Paired Up

来源:互联网 发布:linux mysql 安装包 编辑:程序博客网 时间:2024/06/06 20:02

题目大意:给定n(n=2k)个数,要求配成k对,使得每对和的最大值最小

肯定最大配最小,排序模拟就行了

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 100100using 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;}
0 0