ABC F求调,WA 11个 悬关
  • 板块学术版
  • 楼主sundyLIUXY
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/30 19:28
  • 上次更新2023/11/3 06:52:11
查看原帖
ABC F求调,WA 11个 悬关
706737
sundyLIUXY楼主2023/7/30 19:28
#include <bits/stdc++.h> 
#define int long long
using namespace std;

int n, m, a[200010], b[200010], c[200010], ai, bi, ci, bid, cid;
int d[200010], e[200010], ei, ans;

bool cmp(int x, int y) {
    return x > y;
}

signed main() {
	scanf("%lld%lld", &n, &m);
    for(int i = 1; i <= n; i++) {
        int t;
        scanf("%lld", &t);
        if(t == 0) scanf("%lld", &a[++ai]);
        if(t == 1) scanf("%lld", &b[++bi]);
        if(t == 2) scanf("%lld", &c[++ci]);
    }
    sort(a+1, a+ai+1, cmp), sort(b+1, b+bi+1), sort(c+1, c+ci+1, cmp);
    bid = bi+1;
    for(int i = 1; i <= n; i++) d[i] = d[i-1]+a[i]/*, cout << i << ' ' << d[i] << endl*/;
    for(int i = 1; i <= n; i++) {
        //cout << "$" << ei << endl;
        if(i > bi) e[i] = e[i-1];
        else if(!ei) {
            if(cid < ci) ei += c[++cid];
            e[i] = e[i-1];
        }
        else ei--, e[i] = e[i-1]+b[--bid];
        //cout << i << ' ' << e[i] << endl;
    }
    for(int i = 0; i <= m; i++) ans = max(ans, d[i]+e[m-i])/*, cout << i << ' ' << m-i << endl*/;
    printf("%lld", ans);
	
	return 0;
}
2023/7/30 19:28
加载中...