Submission #46172261
Source Code Expand
use proconio::input;
/// x から k 下がった深さの個数を求める
fn g(n: usize, x: usize, k: usize) -> usize {
if x > n {
return 0;
}
let (mut l, mut r) = (x, x);
for _ in 0..k {
l *= 2;
r = r * 2 + 1;
if l > n {
return 0;
}
}
r = r.min(n);
r + 1 - l
}
fn f(n: usize, mut x: usize, mut k: usize) -> usize {
// 下がるだけ
let mut sum = g(n, x, k);
// 1つ上がってから下がる
while x > 1 && k >= 2 {
sum += g(n, x ^ 1, k - 2);
k -= 1;
x /= 2;
}
// 1つ上がるだけ
if x != 1 && k == 1 {
sum += 1;
}
sum
}
fn main() {
input! {
t: usize,
nxk: [(usize, usize, usize); t],
}
for (n, x, k) in nxk {
let ans = f(n, x, k);
println!("{}", ans);
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - Complete Binary Tree |
| User | bouzuya |
| Language | Rust (rustc 1.70.0) |
| Score | 450 |
| Code Size | 867 Byte |
| Status | AC |
| Exec Time | 142 ms |
| Memory | 7408 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 450 / 450 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 01_small_00.txt, 02_large_00.txt, 02_large_01.txt, 02_large_02.txt, 02_large_03.txt, 02_large_04.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 1972 KiB |
| 00_sample_01.txt | AC | 1 ms | 1996 KiB |
| 01_small_00.txt | AC | 40 ms | 3096 KiB |
| 02_large_00.txt | AC | 140 ms | 7184 KiB |
| 02_large_01.txt | AC | 142 ms | 7316 KiB |
| 02_large_02.txt | AC | 141 ms | 7260 KiB |
| 02_large_03.txt | AC | 142 ms | 7320 KiB |
| 02_large_04.txt | AC | 141 ms | 7408 KiB |