結果
| 問題 |
No.2740 Old Maid
|
| コンテスト | |
| ユーザー |
t33f
|
| 提出日時 | 2024-04-21 11:52:17 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,363 bytes |
| コンパイル時間 | 13,384 ms |
| コンパイル使用メモリ | 391,988 KB |
| 実行使用メモリ | 14,196 KB |
| 最終ジャッジ日時 | 2024-10-13 10:21:16 |
| 合計ジャッジ時間 | 23,826 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 62 |
ソースコード
#![allow(non_snake_case)]
use std::collections::BTreeSet;
use std::iter::once;
use proconio::{input};
fn main() {
input!{ n: usize, p: [usize; n] }
let mut index = vec![0; n];
for i in 0..n { index[p[i] - 1] = i; }
let mut unused: BTreeSet<_> = (0..n).collect();
let mut next = (1..n).chain(once(usize::MAX)).collect::<Vec<_>>();
let mut prev = once(usize::MAX).chain(0..n-1).collect::<Vec<_>>();
let mut ans = Vec::new();
while !unused.is_empty() {
let target_index = {
let mut iter = unused.iter();
let min = iter.next().unwrap();
let min_index = index[*min];
if next[min_index] < n {
min_index
} else {
let second_min = iter.next().unwrap();
index[*second_min]
}
};
let target1 = p[target_index] - 1;
let target2 = p[next[target_index]] - 1;
ans.push(target1 + 1);
ans.push(target2 + 1);
unused.remove(&target1);
unused.remove(&target2);
let prev_index = prev[target_index];
let next_index = next[next[target_index]];
if prev_index < n {
next[prev_index] = next_index;
}
if next_index < n {
prev[next_index] = prev_index;
}
}
for x in ans { println!("{x} "); }
}
t33f