結果

問題 No.3267 PQ Straight
ユーザー ardririy
提出日時 2025-09-12 21:55:48
言語 Rust
(1.83.0 + proconio)
結果
AC  
実行時間 55 ms / 1,000 ms
コード長 4,926 bytes
コンパイル時間 12,019 ms
コンパイル使用メモリ 403,680 KB
実行使用メモリ 18,872 KB
最終ジャッジ日時 2025-09-12 23:38:32
合計ジャッジ時間 15,002 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

use library::utils::input::Input;

fn solve(ip: &mut Input) {
    let n = ip.next();
    if n % 2 == 0 {
        println!("No");
        return;
    }
    
    let base = (n+3)/2;
    let target = (base..base+n).collect::<Vec<_>>();
    let mut p = vec![0; n];
    
    let mut cur = 0;
    for i in 1..=n {
        p[cur] = i;
        cur += 2;
        cur %= n;
    }

    let mut q = vec![0; n];
    for (i, pi) in p.iter().enumerate() {
        q[i] = target[i] - *pi;
    }

    println!("Yes");
    println!("{}", p.iter().map(|x|x.to_string()).collect::<Vec<_>>().join(" "));
    println!("{}", q.iter().map(|x|x.to_string()).collect::<Vec<_>>().join(" "));

}

fn main() {
    static IS_MULTI_TEST_CASE :bool = false;
    let mut ip = Input::new();

    let t = if IS_MULTI_TEST_CASE {
        ip.next::<usize>()
    } else {
        1
    };

    for _ in 0..t {
        solve(&mut ip);
    }
}


// ===== bundled library =====

pub mod library {
    pub mod utils {
        pub mod input {
            use std::str::{from_utf8, FromStr};
            pub struct Input {
                buf: Vec<u8>,
                pos: usize,
            }
            impl Default for Input {
                fn default() -> Self {
                    Self::new()
                }
            }
            impl Input {
                pub fn new() -> Self {
                    Self { buf: Vec::new(), pos: 0 }
                }
                pub fn next<T: FromStr>(&mut self) -> T {
                    while self.pos < self.buf.len()
                        && self.buf[self.pos].is_ascii_whitespace()
                    {
                        self.pos += 1;
                    }
                    let start = self.pos;
                    while self.pos < self.buf.len()
                        && !self.buf[self.pos].is_ascii_whitespace()
                    {
                        self.pos += 1;
                    }
                    if start == self.pos {
                        let mut input = String::new();
                        std::io::stdin()
                            .read_line(&mut input)
                            .expect("Failed to read line");
                        self.buf.clear();
                        self.buf.extend(input.as_bytes());
                        self.pos = 0;
                        return self.next();
                    }
                    from_utf8(&self.buf[start..self.pos])
                        .unwrap()
                        .parse::<T>()
                        .ok()
                        .unwrap_or_else(|| {
                            panic!(
                                "Failed to parse input: {}", from_utf8(& self.buf[start
                                ..self.pos]).unwrap()
                            )
                        })
                }
                #[allow(non_snake_case)]
                pub fn vector<T: FromStr>(&mut self, n: usize) -> Vec<T> {
                    (0..n).map(|_| self.next()).collect()
                }
                pub fn graph(
                    &mut self,
                    n: usize,
                    m: usize,
                    is_one_way: bool,
                ) -> Vec<Vec<usize>> {
                    let mut graph = vec![Vec::new(); n];
                    for _ in 0..m {
                        let (u, v): (usize, usize) = self.pair();
                        graph[u - 1].push(v - 1);
                        if !is_one_way {
                            graph[v - 1].push(u - 1);
                        }
                    }
                    graph
                }
                pub fn weighted_graph<T: Copy + FromStr>(
                    &mut self,
                    n: usize,
                    m: usize,
                    is_one_way: bool,
                    is_one_based: bool,
                ) -> Vec<Vec<(usize, T)>> {
                    let mut graph = vec![Vec::new(); n];
                    for _ in 0..m {
                        let (u, v) = self.pair::<usize>();
                        let w = self.next::<T>();
                        let u = if is_one_based { u - 1 } else { u };
                        let v = if is_one_based { v - 1 } else { v };
                        graph[u].push((v, w));
                        if !is_one_way {
                            graph[v].push((u, w));
                        }
                    }
                    graph
                }
                pub fn pair<T: FromStr>(&mut self) -> (T, T) {
                    (self.next(), self.next())
                }
                pub fn triple<T: FromStr>(&mut self) -> (T, T, T) {
                    (self.next(), self.next(), self.next())
                }
                pub fn chars(&mut self) -> Vec<char> {
                    self.next::<String>().chars().collect::<Vec<_>>()
                }
            }
        }
    }
}

0