Submission #74712552
Source Code Expand
use proconio::input;
use itertools::Itertools;
struct Trie {
ch: Vec<[usize; 2]>,
cnt: Vec<usize>,
}
impl Trie {
fn new() -> Self {
Self { ch: vec![[0, 0]], cnt: vec![0] }
}
fn insert(&mut self, val: usize) {
let mut u = 0;
self.cnt[0] += 1;
for i in (0..19).rev() {
let b = (val >> i) & 1;
if self.ch[u][b] == 0 {
self.ch[u][b] = self.ch.len();
self.ch.push([0, 0]);
self.cnt.push(0);
}
u = self.ch[u][b];
self.cnt[u] += 1;
}
}
fn query_and_remove(&mut self, val: usize) -> usize {
let mut u = 0;
let mut p = 0;
self.cnt[0] -= 1;
for i in (0..19).rev() {
let b = (val >> i) & 1;
let preferred = b;
let next;
if self.ch[u][preferred] != 0 && self.cnt[self.ch[u][preferred]] > 0 {
next = self.ch[u][preferred];
p |= (preferred << i);
} else {
next = self.ch[u][1 - preferred];
p |= ((1 - preferred) << i);
}
u = next;
self.cnt[u] -= 1;
}
p
}
}
fn main() {
input! {
T: usize,
}
for _ in 0..T {
input! {
N: usize,
}
let mut trie = Trie::new();
for i in 1..=N {
trie.insert(i);
}
let mut cur = 0;
let mut ans = Vec::with_capacity(N);
for _ in 0..N {
let p = trie.query_and_remove(cur);
ans.push(p);
cur ^= p;
}
println!("{}", ans.into_iter().join(" "));
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | A - Min of Sum of XOR |
| User | memoka |
| Language | Rust (rustc 1.89.0) |
| Score | 500 |
| Code Size | 1787 Byte |
| Status | AC |
| Exec Time | 28 ms |
| Memory | 14296 KiB |
Compile Error
warning: unnecessary parentheses around assigned value --> src/main.rs:39:22 | 39 | p |= (preferred << i); | ^ ^ | = note: `#[warn(unused_parens)]` on by default help: remove these parentheses | 39 - p |= (preferred << i); 39 + p |= preferred << i; | warning: unnecessary parentheses around assigned value --> src/main.rs:42:22 | 42 | p |= ((1 - preferred) << i); | ^ ^ | help: remove these parentheses | 42 - p |= ((1 - preferred) << i); 42 + p |= (1 - preferred) << i; | warning: variable `T` should have a snake case name --> src/main.rs:53:9 | 53 | T: usize, | ^ help: convert the identifier to snake case: `t` | = note: `#[warn(non_snake_case)]` on by default warning: variable `N` should have a snake case name --> src/main.rs:57:13 | 57 | N: usize, | ^ help: convert the identifier to snake case: `n`
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt |
| All | 00_sample_00.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 2012 KiB |
| 01_random_00.txt | AC | 28 ms | 14236 KiB |
| 01_random_01.txt | AC | 28 ms | 14232 KiB |
| 01_random_02.txt | AC | 27 ms | 14296 KiB |
| 01_random_03.txt | AC | 27 ms | 14248 KiB |
| 01_random_04.txt | AC | 27 ms | 14216 KiB |
| 01_random_05.txt | AC | 27 ms | 14248 KiB |
| 01_random_06.txt | AC | 27 ms | 14184 KiB |
| 01_random_07.txt | AC | 27 ms | 14212 KiB |
| 01_random_08.txt | AC | 27 ms | 14172 KiB |
| 01_random_09.txt | AC | 27 ms | 14176 KiB |
| 01_random_10.txt | AC | 22 ms | 2180 KiB |
| 01_random_11.txt | AC | 21 ms | 2124 KiB |
| 01_random_12.txt | AC | 22 ms | 1936 KiB |