結果
| 問題 | No.972 選び方のスコア |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-11-06 23:48:15 |
| 言語 | Fix (1.6.0 + cp-library + minilib) |
| 結果 |
AC
不安定
|
| 実行時間 | 38 ms / 2,000 ms |
| + 417µs | |
| コード長 | 3,225 bytes |
| 記録 | |
| コンパイル時間 | 11,884 ms |
| コンパイル使用メモリ | 670,704 KB |
| 実行使用メモリ | 9,868 KB |
| 最終ジャッジ日時 | 2026-11-06 23:48:33 |
| 合計ジャッジ時間 | 17,300 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 32 |
コンパイルメッセージ
make: 'lib.o' は更新済みです.
ソースコード
module Main;
// import BinaryHeap;
// import BoolArray;
// import CPLib.Arithmetic;
// import CPLib.Bipartite;
// import CPLib.Bits;
// import CPLib.Convolution;
// import CPLib.DSegtree;
// import CPLib.Graph;
import CPLib.IO;
// import CPLib.LDSegtree;
// import CPLib.LSegtree;
// import CPLib.MaxFlow;
// import CPLib.Memoize;
// import CPLib.MinCostFlow;
// import CPLib.Misc;
// import CPLib.Monoid;
// import CPLib.Segtree;
// import CPLib.String;
// import CPLib.Trait;
// import CPLib.TwoSat;
// import CPLib.UnionFind;
// import CPLib.ZP;
// import HashMap;
// import HashSet;
main : IO () = (
let iN = *read_i;
let iAs = *read_is(iN);
let iAs = iAs.sort;
let acm = range(0, iN).fold([0], |i, acm|
let prev = acm.@(i);
acm.push_back(iAs.@(i) + prev)
);
let ans0 = range(0, iN).map(|i|
let n = min(i, iN-i-1);
if n == 0 { 0 };
let good = |m| (
let j = iN - m;
let k = i - m;
iAs.@(j) + iAs.@(k) - 2 * iAs.@(i) > 0
);
let m = (
if !good(1) {
0
};
if good(n) {
n
};
let lo = 0; let hi = n;
loop((lo, hi), |(lo, hi)|
if hi - lo <= 1 {
lo.break
};
let mid = lo + (hi - lo) / 2;
if good(mid) {
let lo = mid;
(lo, hi).continue
} else {
let hi = mid;
(lo, hi).continue
}
)
);
let sum = iAs.@(i) + acm.@(iN) - acm.@(iN - m) + acm.@(i) - acm.@(i-m);
let score = sum - iAs.@(i) * (1 + 2 * m);
// eval "score = {}, odd, i = {}, m = {}, sum = {}, iAs.@(i) = {}, medians = {}".debug_eprintfln((score, i, m, sum, iAs.@(i), iAs.@(i) * (1 + 2 * m)));
score
).fold(I64::minimum, max);
let ans1 = range(0, iN - 1).map(|i|
let j = i + 1;
let n = min(iN - j - 1, i);
if n == 0 { 0 };
let good = |m| (
let k = i - m;
let l = iN - m;
iAs.@(k) + iAs.@(l) - (iAs.@(i) + iAs.@(j)) > 0
);
let m = (
if !good(1) {
0
};
if good(n) {
n
};
let lo = 0; let hi = n;
loop((lo, hi), |(lo, hi)|
if hi - lo <= 1 {
lo.break
};
let mid = lo + (hi - lo) / 2;
if good(mid) {
let lo = mid;
(lo, hi).continue
} else {
let hi = mid;
(lo, hi).continue
}
)
);
let sum2 = iAs.@(i) + iAs.@(j) + acm.@(iN) - acm.@(iN - m) + acm.@(i) - acm.@(i - m);
let score = sum2 - (iAs.@(i) + iAs.@(j)) * (1 + m);
// eval "score = {}, even, i = {}, m = {}, sum2 = {}, mediums = {}".debug_eprintfln((score, i, m, sum2, (iAs.@(i) + iAs.@(j)) * (1 + m)));
score
).fold(I64::minimum, max);
let ans = ans0.max(ans1);
ans.to_string.println;;
pure()
);