1 条题解
-
0
#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 さあ、今日も行こう! 暗闇の中でキラキラ 闇から光の世界へ 彩度と明るさを高めて 殺した僕の一部を見て 人気急上昇, 激しい反応 止まらないフォロワー数 膨れ上がる承認欲求 今日はここまで、また明日! */
- 1
信息
- ID
- 230
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 6
- 已通过
- 4
- 上传者