結果
| 問題 |
No.873 バイナリ、ヤバいなり!w
|
| コンテスト | |
| ユーザー |
akakimidori
|
| 提出日時 | 2019-08-30 22:15:48 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,595 bytes |
| コンパイル時間 | 15,387 ms |
| コンパイル使用メモリ | 387,300 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-06-24 01:37:35 |
| 合計ジャッジ時間 | 18,161 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 WA * 14 |
ソースコード
fn run() {
let mut s = String::new();
std::io::stdin().read_line(&mut s).unwrap();
let n: usize = s.trim().parse().unwrap();
let mut dp = vec![0; n + 1];
for i in 1..=n {
let mut s = i;
let mut j = 1;
while j * j <= i {
s = std::cmp::min(s, dp[i - j * j] + j);
j += 1;
}
dp[i] = s;
}
let mut a = vec![];
let mut m = n;
while m > 0 {
let mut find = false;
let mut j = 1;
while j * j <= m && !find {
if dp[m - j * j] + j == dp[m] {
find = true;
m -= j * j;
a.push(j);
}
j += 2;
}
let mut j = 2;
while j * j <= m && !find {
if dp[m - j * j] + j == dp[m] {
find = true;
m -= j * j;
a.push(j);
}
j += 2;
}
}
a.sort_by(|a, b| {
if a % 2 == b % 2 {
a.cmp(&b)
} else if a % 2 == 1 {
std::cmp::Ordering::Less
} else {
std::cmp::Ordering::Greater
}
});
let mut ans = String::new();
let mut prev = '0';
for mut a in a {
ans.push(prev);
a -= 1;
while a > 1 {
ans.push(if prev == '1' {'0'} else {'1'});
ans.push(prev);
a -= 2;
}
if a > 0 {
ans.push(if prev == '1' {'0'} else {'1'});
prev = if prev == '1' {'0'} else {'1'};
}
}
println!("{}", ans);
}
fn main() {
run();
}
akakimidori