contests/arc007/arc007_2.rs (123 lines of code) (raw):
#![allow(non_snake_case)]
use proconio::source::auto::AutoSource;
use proconio::{fastout, input};
use std::io::Read;
#[fastout]
fn main() {
// main関数は変更しない
let mut s = String::new();
std::io::stdin().read_to_string(&mut s).unwrap();
println!("{}", solve(&s));
}
fn solve(src: &str) -> String {
let source = AutoSource::from(src);
input! {
from source,
N: usize,
M: usize,
listen_order: [u64; M]
}
let mut cases: Vec<u64> = vec![];
for i in 0..N + 1 {
cases.push(i as u64);
}
for l in listen_order {
if l == cases[0] {
continue;
}
let mut key = 0;
let mut i = 0;
for case in cases.clone() {
if case == l {
key = i;
break;
}
i += 1;
}
let tmp_now_listen = cases[key];
cases[key] = cases[0];
cases[0] = tmp_now_listen;
}
let mut answer = String::new();
let mut is_first = true;
for case in cases {
if is_first {
is_first = false;
continue;
}
if answer.len() == 0 {
answer = format!("{}", case);
} else {
answer = format!("{}\n{}", answer, case)
}
}
answer.to_string()
}
// ここから上を提出してください
// 以下テストコード
#[cfg(test)]
mod test {
use crate::solve;
macro_rules! test {
($($input:expr => $output:expr),* $(,)*) => {
#[test]
fn solve_test() {
$(
assert_eq!(solve($input), $output);
)*
}
};
}
test! {
r#"5 6
2
3
5
0
1
3"# => r#"0
5
2
4
1"#,
r#"3 5
0
1
1
1
2"# => r#"0
1
3"#,
r#"5 0"# => r#"1
2
3
4
5"#,
r#"10 7
2
8
5
3
3
8
1"# => r#"8
0
5
4
3
6
7
2
9
10"#,
r#"5 7
3
4
3
1
2
2
0"# => r#"3
1
2
4
5"#
}
}
// https://atcoder.jp/contests/arc007/tasks/arc007_2