1 条题解

  • 0
    @ 2026-10-19 14:16:06
    #include<bits/stdc++.h>
    using namespace std;
    #define endl '\n'
    #define fi first
    #define se second
    #define int long long
    const int maxn = 3e5 + 10;
    struct man{int a, b, c;} a[maxn]; 
    int n, x, y, pre[maxn], suf[maxn], sum, A[maxn], B[maxn];
    priority_queue <int> q;
    signed main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0), cout.tie(0);
    	// freopen("dual.in", "r", stdin);
    	// freopen("dual.out", "w", stdout);
    	int z;
    	while(cin >> x >> y >> z){
    		n = x + y + z;
    		if(! n) return 0;
    		while(q.size()) q.pop(); sum = 0;
    		for(int i = 1; i <= n; i++) cin >> a[i].a;
    		for(int i = 1; i <= n; i++) cin >> a[i].b;
    		for(int i = 1; i <= n; i++) cin >> a[i].c;
    		sort(a + 1, a + n + 1, [](man u, man v){return u.a - u.b < v.a - v.b;});
    		for(int i = 1; i <= n; i++) A[i] = a[i].a - a[i].c, B[i] = a[i].b - a[i].c;
    		for(int i = 1; i < x; i++) q.push(A[i]), sum += A[i];
    		for(int i = x; i <= n; i++){
    			q.push(A[i]); sum += A[i];
    			if(q.size() > x) sum -= q.top(), q.pop();
    			pre[i] = sum;
    		}
    		while(q.size()) q.pop(); sum = 0;
    		for(int i = n; i > n - y + 1; i--) q.push(B[i]), sum += B[i];
    		for(int i = n - y + 1; i >= 1; i--){
    			q.push(B[i]); sum += B[i];
    			if(q.size() > y) sum -= q.top(), q.pop();
    			suf[i] = sum;
    		}
    		int ans = 1e18, C = 0;
    		for(int i = 1; i <= n; i++) C += a[i].c;
    		for(int m = x; m <= n - y; m++) ans = min(ans, C + pre[m] + suf[m + 1]);
    		cout << ans << endl;
    	}
    	return 0;
    }
    /*
    少し緊張しながら
    アバターで顔を隠し
    バーチャルの世界へDive
    さあ、今日も行こう!
    暗闇の中でキラキラ
    闇から光の世界へ
    彩度と明るさを高めて
    殺した僕の一部を見て
    人気急上昇, 激しい反応
    止まらないフォロワー数
    膨れ上がる承認欲求
    今日はここまで、また明日!
    
    */
    
    

    信息

    ID
    230
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    6
    已通过
    4
    上传者