結果

問題 No.2495 Three Sets
コンテスト
ユーザー KumaTachiRen
提出日時 2026-10-22 18:27:51
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 1,982 ms / 3,000 ms
+ 883µs
コード長 1,209 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,896 ms
コンパイル使用メモリ 343,416 KB
実行使用メモリ 9,872 KB
最終ジャッジ日時 2026-10-22 18:28:09
合計ジャッジ時間 15,310 ms
ジャッジサーバーID
(参考情報)
judge4_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define ALL(v) (v).begin(), (v).end()
#define rep(i, a, b) for (int i = (int)(a); i < (int)(b); i++)

ll ceil(ll a, ll b) { return a <= 0 ? a / b : (a - 1) / b + 1; }

int main() {
	int NA, NB, NC;
	cin >> NA >> NB >> NC;
	vector<ll> A(NA), B(NB), C(NC);
	for (auto& v : A) cin >> v;
	for (auto& v : B) cin >> v;
	for (auto& v : C) cin >> v;
	sort(ALL(A));
	sort(ALL(B));
	sort(ALL(C));
	vector<ll> Aasc = A;
	reverse(ALL(A));
	reverse(ALL(B));
	reverse(ALL(C));
	vector<ll> sumA(NA + 1), sumB(NB + 1), sumC(NC + 1);
	rep(i, 0, NA) sumA[i + 1] = sumA[i] + A[i];
	rep(i, 0, NB) sumB[i + 1] = sumB[i] + B[i];
	rep(i, 0, NC) sumC[i + 1] = sumC[i] + C[i];
	
	ll ans = 0;
	rep(cB, 0, NB + 1) {
		if (0 < cB && cB < NB && B[cB - 1] == B[cB]) continue;
		ll sB = sumB[cB];
		rep(cC, 0, NC + 1) {
			if (0 < cC && cC < NC && C[cC - 1] == C[cC]) continue;
			ll sC = sumC[cC];
			if (cB == 0) {
				ans = max(ans, sB * cC + max(0ll, sC * NA));
			} else {
				int k = lower_bound(ALL(Aasc), ceil(-sC, cB)) - Aasc.begin();
				int cA = NA - k;
				ll sA = sumA[cA];
				ans = max(ans, sA * cB + sB * cC + sC * cA);
			}
		}
	}
	cout << ans << "\n";
}
0