2023-07-25 ABC191 A, B, C, D を解いた
ABC191 : AtCoder Beginner Contest 191
- A - Vanishing Pitch
https://atcoder.jp/contests/abc191/tasks/abc191_a
- 提出: https://atcoder.jp/contests/abc191/submissions/43939200
!(v * t..=v * s).contains(&d)
- B - Remove It
https://atcoder.jp/contests/abc191/tasks/abc191_b
- 提出: https://atcoder.jp/contests/abc191/submissions/43939206
a.iter().copied().filter(|a_i| a_i != &x)
して出力するだけ
- C - Digital Graffiti
https://atcoder.jp/contests/abc191/tasks/abc191_c
- 提出: https://atcoder.jp/contests/abc191/submissions/43939406
- 周囲の
.
マスから周囲 8 マスの状況に合わせてカウントするだけ - ただ、実装がひたすら重い。もっと簡単に解ける方針がありそう
- D - Circle Lattice Points
https://atcoder.jp/contests/abc191/tasks/abc191_d
- 提出: https://atcoder.jp/contests/abc191/submissions/43952855
- 解説 (以前の自身の提出) AC
- 小数の配慮がややこしいので 10_000 をかけて整数に
- 正負での切り上げ・切り捨ての違いの考慮が難しいので中心を 10_000_000 ずつずらして正の数に
- E - Come Back Quickly
https://atcoder.jp/contests/abc191/tasks/abc191_e
- 未着手
- F - GCD or MIN
https://atcoder.jp/contests/abc191/tasks/abc191_f
- 未着手
use proconio::{input, marker::Chars};
fn main() {
input! {
x: Chars,
y: Chars,
r: Chars,
};
let f = |chars: Vec<char>| -> i64 {
let n = chars.len();
match chars.iter().position(|c| c == &'.') {
Some(p) => chars
.into_iter()
.filter(|&c| c != '.')
.chain("0".repeat(4 - (n - 1 - p)).chars())
.collect::<String>(),
None => chars
.into_iter()
.chain("0".repeat(4).chars())
.collect::<String>(),
}
.parse::<i64>()
.unwrap()
};
let m = 10_000_i64;
let cx = f(x) + 10_000_000_000;
let cy = f(y) + 10_000_000_000;
let r = f(r);
let mut ans = 0_i64;
for x in (cx - r + m - 1) / m..=(cx + r) / m {
let dx = (cx - x * m).abs();
let dy = {
let mut ok = 0;
let mut ng = r + 1;
while ng - ok > 1 {
let dy = ok + (ng - ok) / 2;
if dx.pow(2) + dy.pow(2) <= r.pow(2) {
ok = dy;
} else {
ng = dy;
}
}
ok
};
let top = (cy + dy) / m;
let bottom = (cy - dy + m - 1) / m;
ans += top - bottom + 1;
}
println!("{}", ans);
}
今日のコミット。
- rust-atcoder 1 commit
- genpi 1 commit