Codeforces Round #415 B Summer sell-off

题目大意:这题大概就是在n组库存与销售量关系中,找出f组,使其库存翻倍从而提高销售额,我们的目的就是找出利益最大化的f组。
看上去挺水的,我一开始直接开三个数组想暴力排序+查找,果不其然,好像是第12组数据就WA了(/”≡ _ ≡)/~┴┴

唉,之后就老老实实结构体数组排序呗,顺带写了个cmp,快速sort一下就好了,感觉写的比暴力还要快???

#include<bits/stdc++.h>
using namespace std;
int n,m;
typedef long long ll;
struct edge
{
    ll a,b,c;
}d[100005];
 bool cmp(edge A,edge B)
{
    return A.c<B.c;
}
int mak[100005];
int main()
{
    memset(mak,0,sizeof(mak));
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    {
        scanf("%lld%lld",&d[i].a,&d[i].b);
        long long int num=d[i].a*2;
        if(d[i].a<=d[i].b)//只有这种情况能提高销售额
        {
            if(num>=d[i].b)
                d[i].c=d[i].b-d[i].a;
            else if(num<=d[i].b)
                d[i].c=num-d[i].a;
            //mak[i]=1;
            //printf("%d\n",i);
        }
    }
    sort(d,d+n,cmp);
    long long int sum=0;
    for(int i=n-1;i>=0;i--)
    {
        if(i>=n-m)
        {
            if(d[i].a*2>=d[i].b)
                sum+=d[i].b;
            else
                sum+=d[i].a*2;
        }
        else
            sum+=min(d[i].a,d[i].b);
    }
    printf("%lld\n",sum);
}