結果
| 問題 | No.3697 実力を揃える |
| コンテスト | |
| ユーザー |
urectanc
|
| 提出日時 | 2026-09-09 23:20:26 |
| 言語 | Rust (1.97.1 + proconio + num + itertools + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 105 ms / 5,000 ms |
| + 419µs | |
| コード長 | 1,050 bytes |
| 記録 | |
| コンパイル時間 | 4,770 ms |
| コンパイル使用メモリ | 186,084 KB |
| 実行使用メモリ | 18,944 KB |
| 最終ジャッジ日時 | 2026-09-09 23:21:00 |
| 合計ジャッジ時間 | 7,091 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 14 |
ソースコード
use proconio::input;
fn main() {
input! {
n: usize,
a: [i64; n],
}
let (first, second) = a.split_at(n / 2);
let p = enumerate(&first);
let q = enumerate(&second);
let mut ans = i64::MAX;
for i in 0..=n / 2 {
let p = &p[i];
let q = &q[n / 2 - i];
for &p in p {
let i = q.partition_point(|&q| p + q < 0);
if i < q.len() {
let cand = p + q[i];
ans = ans.min(cand.abs());
}
if i > 0 {
let cand = p + q[i - 1];
ans = ans.min(cand.abs());
}
}
}
println!("{ans}");
}
fn enumerate(a: &[i64]) -> Vec<Vec<i64>> {
let n = a.len();
let mut res = vec![vec![]; n + 1];
for bits in 0usize..1 << n {
let sum = (0..n)
.map(|i| if bits >> i & 1 == 0 { a[i] } else { -a[i] })
.sum::<i64>();
res[bits.count_ones() as usize].push(sum);
}
res.iter_mut().for_each(|v| v.sort_unstable());
res
}
urectanc