2023-12-19 bouzuya/firestore-path 0.3.0 / ABC330 C, D
bouzuya/firestore-path 0.3.0 をつくった。
Error
を追加した。
enum
で公開していたものを pub struct Error(/* private fields */);
に変更した。内部的には enum ErrorKind {...}
を struct Error(ErrorKind)
の形で持っている。
std::io::ErrorKind
の形にならってみた。
https://doc.rust-lang.org/std/io/enum.ErrorKind.html
ABC330 トヨタシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 330)
- C - Minimize Abs 2
https://atcoder.jp/contests/abc330/tasks/abc330_c
- 提出: https://atcoder.jp/contests/abc330/submissions/48659670
- 各
x
に対して最適なy
を求めていけば良い x^2+y^2
の D 前後の値を求めれば良いのでありえるx
は√D
くらいまでなので間に合う
- D - Counting Ls
https://atcoder.jp/contests/abc330/tasks/abc330_d
- 提出: https://atcoder.jp/contests/abc330/submissions/48660550
- 4 方向の L を試す
- それぞれ累積和をあらかじめ求めておけば間に合う
use proconio::{input, marker::Chars};
fn main() {
input! {
n: usize,
s: [Chars; n],
};
let mut rows = vec![vec![0; n + 1]; n];
for i in 0..n {
for j in 0..n {
rows[i][j + 1] = rows[i][j] + if s[i][j] == 'o' { 1 } else { 0 };
}
}
let mut rrows = vec![vec![0; n + 1]; n];
for i in 0..n {
for j in (0..n).rev() {
rrows[i][j] = rrows[i][j + 1] + if s[i][j] == 'o' { 1 } else { 0 };
}
}
let mut cols = vec![vec![0; n]; n + 1];
for j in 0..n {
for i in 0..n {
cols[i + 1][j] = cols[i][j] + if s[i][j] == 'o' { 1 } else { 0 };
}
}
let mut rcols = vec![vec![0; n]; n + 1];
for j in 0..n {
for i in (0..n).rev() {
rcols[i][j] = rcols[i + 1][j] + if s[i][j] == 'o' { 1 } else { 0 };
}
}
// for i in 0..=n {
// for j in 0..n {
// print!("{} ", rcols[i][j]);
// }
// println!();
// }
let mut ans = 0_usize;
// tl
for i in 0..n {
for j in 0..n {
if s[i][j] != 'o' {
continue;
}
ans += (rows[i][n] - rows[i][j + 1]) * (cols[n][j] - cols[i + 1][j]);
}
}
// tr
for i in 0..n {
for j in 1..n {
if s[i][j] != 'o' {
continue;
}
ans += (rrows[i][0] - rrows[i][j]) * (cols[n][j] - cols[i + 1][j]);
}
}
// br
for i in 1..n {
for j in 0..n {
if s[i][j] != 'o' {
continue;
}
ans += (rrows[i][0] - rrows[i][j]) * (rcols[0][j] - rcols[i][j]);
}
}
// bl
for i in 1..n {
for j in 0..n {
if s[i][j] != 'o' {
continue;
}
ans += (rows[i][n] - rows[i][j + 1]) * (rcols[0][j] - rcols[i][j]);
}
}
println!("{}", ans);
}
今日のコミット。
- rust-atcoder 1 commit
- firestore-path 2 commits