2023-11-09 ABC192 A, B, C, D
鼻水が出る。
ABC192 : SOMPO HD プログラミングコンテスト2021(AtCoder Beginner Contest 192)
- A - Star
https://atcoder.jp/contests/abc192/tasks/abc192_a
- 提出: https://atcoder.jp/contests/abc192/submissions/47407592
100 - (x % 100)
- B - uNrEaDaBlE sTrInG
https://atcoder.jp/contests/abc192/tasks/abc192_b
- 提出: https://atcoder.jp/contests/abc192/submissions/47407631
- 先頭から指示通りに判定
- C - Kaprekar Number
https://atcoder.jp/contests/abc192/tasks/abc192_c
- 提出: https://atcoder.jp/contests/abc192/submissions/47407757
- 指示通りの関数をつくって A_0 から A_K まで試す
- D - Base n
https://atcoder.jp/contests/abc192/tasks/abc192_d
- 提出: https://atcoder.jp/contests/abc192/submissions/47409055
- 1 桁の場合の考慮を忘れて 2WA
- 1 桁の場合は n 進数を増やしても値は増加しない
- それ以外は単調増加なので n を二分探索する
- E - Train
https://atcoder.jp/contests/abc192/tasks/abc192_e
- 未着手
- F - Potion
https://atcoder.jp/contests/abc192/tasks/abc192_f
- 未着手
use proconio::{input, marker::Chars};
fn main() {
input! {
x: Chars,
m: usize,
};
let x = x
.iter()
.map(|&c| c.to_digit(10).unwrap() as usize)
.collect::<Vec<usize>>();
let d = x.iter().max().unwrap();
fn f(x: &[usize], n: usize) -> Option<usize> {
let mut v = 0_usize;
for c in x.iter().copied() {
v = v.checked_mul(n)?;
v = v.checked_add(c)?;
}
Some(v)
}
if x.len() == 1 {
if let Some(v) = f(&x, d + 1) {
if v <= m {
println!("1");
return;
}
}
println!("0");
return;
}
if let Some(v) = f(&x, d + 1) {
if v > m {
println!("0");
return;
}
} else {
println!("0");
return;
}
let mut ok = d + 1;
let mut ng = 1 << 60;
while ng - ok > 1 {
let mid = ok + (ng - ok) / 2;
if let Some(v) = f(&x, mid) {
if v <= m {
ok = mid;
} else {
ng = mid;
}
} else {
ng = mid;
}
}
let ans = ok - d;
println!("{}", ans);
}
今日のコミット。
- rust-atcoder 1 commit
- kireta 9 commits