結果
| 問題 |
No.3267 PQ Straight
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
ソースコード
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<_>>()
}
}
}
}
}