express

来源:互联网 发布:粒子群算法matlab实例 编辑:程序博客网 时间:2024/06/05 06:27

贪心,先满足,再加最大的

#include<cstdio>#include<algorithm>using namespace std;#define ll long longll n,m,s,k;struct st{    ll t,s,u;}a[219999];int f[219999];int cmp(const st &a,const st &b){    if(a.t>b.t||a.t==b.t&&a.s>b.s)return 1;    return 0;}int comp(const st &a,const st &b){    if(a.s>b.s)return 1;    return 0;}int main(){    scanf("%lld%lld%lld%lld",&n,&m,&s,&k);    for(int i=1;i<=m;i++)scanf("%lld%lld",&a[i].t,&a[i].s);    sort(a+1,a+m+1,cmp);    ll ss=0,ans=0;    for(int i=1;i<=m+1;i++){        a[i].u=i,a[i].s-=2;        if(a[i].t!=a[i-1].t) {            if(ss>=k||i==1){                ans+=ss,ss=a[i].s,f[i]=1,s--;if(i==m+1)s++;            }            else {                printf("-23333333");                return 0;            }            if(i==m+1)break;            if(s<=0) {                printf("-23333333");                return 0;            }        }        else {            if(ss>=k)continue;            else ss+=a[i].s,s--,f[i]=1;            if(s<=0)                {                printf("-23333333");                return 0;            }        }    }    sort(a+1,a+m+1,comp);    for(int i=1;i<=m;i++){        if(!f[a[i].u]&&a[i].s>0) ans+=a[i].s,s--;           if(s<=0) break;    }        printf("%lld\n",ans);}
原创粉丝点击