2023-05-22 濡れて帰ってきて散髪 / PAST #3 I を解いた
子どもを迎えに行こうとしたら雨。
https://iris.to/note1dyyvznf2nf7v5px7sd8x9uyhyfr6lg36l47u4hzfmclu5ggy8m9sf3z60l
濡れて帰ってきて早く風呂に入りたかったのに、上の子が「髪を切ってくれ」としつこい。ぼくが折れて散髪した。
そんなに髪は伸びていないので気休め程度に切った。いつものことだけど後頭部や耳周りをどう切っていいのか分からない。プロの仕事を見ればいいのだろうか。できあがりの写真のひとつでもあればもうすこし良くなりそうではある。
- PAST #3 I - 行列操作 (第三回 アルゴリズム実技検定 I問題)
https://atcoder.jp/contests/past202005-open/tasks/past202005_i
- https://atcoder.jp/contests/past202005-open/submissions/41631362
- 毎回データを更新しては間に合わない
- どの行とどの行が swap された、どの列とどの列が swap された、転置された
- それだけを更新する
- 考察的にはこれくらいなのだけど、実際に書くと不安になったり、すっと通らなかったときにパニックになりがちな問題
use proconio::{input, marker::Usize1};
fn main() {
input! {
n: usize,
q: usize,
}
let mut cols = (0..n).collect::<Vec<usize>>();
let mut rows = (0..n).collect::<Vec<usize>>();
let mut rotate = false;
for _ in 0..q {
input! {
t: usize,
}
match t {
1 => {
input! {
a: Usize1,
b: Usize1,
}
if rotate {
cols.swap(a, b);
} else {
rows.swap(a, b);
}
}
2 => {
input! {
a: Usize1,
b: Usize1,
}
if rotate {
rows.swap(a, b);
} else {
cols.swap(a, b);
}
}
3 => {
rotate = !rotate;
}
4 => {
input! {
a: Usize1,
b: Usize1,
}
if rotate {
println!("{}", n * rows[b] + cols[a]);
} else {
println!("{}", n * rows[a] + cols[b]);
}
}
_ => unreachable!(),
}
}
}
今日のコミット。
- tsukota 2 commits
- rust-atcoder 1 commit