簡単な自己紹介

ぽんずです。
競技プログラミングとリズムゲーム、水族館が好きです。
ポン酢はそこまで好きではないです。

好きな言語

  • 日本語
  • C++
  • Rust

好きなリズムゲーム

  • SOUND VOLTEX EXCEED GEAR

好きな海の生き物

  • カクレクマノミ
  • ペンギン

各種リンク

Twitter Bluesky AtCoder GitHub

連絡

Blueskyのチャット(DM)にお願いします。

A

問題概要

A-Isosceles
三角形の\(4\)辺の長さが与えられる。二等辺三角形か判定しなさい。
不正な三角形は入力として与えられない。

解法

特に何も考えず、 \(3\) 辺のうち少なくとも$2$辺の長さが等しければその三角形は二等辺三角形である。
もし不正な三角形が入力される可能性があるなら、一番長い辺がそれ以外の辺の長さの合計より短いかどうかを判定すればよい。

提出

https://atcoder.jp/contests/abc424/submissions/69509904

B

問題概要

B - Perfect
\(N\) 人が \(M\) 問からなるコンテストに参加した。人 \(A_i\) が問題 \(B_i\) に正解した情報が与えられる。全ての問題に正解した人の番号を正解したタイミングが早い順に出力しろ。

解法

入力の制約で \(i \neq j \rightarrow (A_i , B_i) \neq (A_j , B_j)\) が保証されている。
なので人ごとに正解数を管理しておいて正解数が \(M\) になった瞬間に答えを保持する配列にメモすればよい。

提出

https://atcoder.jp/contests/abc424/submissions/69510002

C

問題概要

C - New Skill Acquired
\(N\) 個のスキル \((A_i,B_i)\) が与えられる。 \((A_i,B_i) = (0,0)\) のときスキル \(i\) を習得済みであり、そうでないときはスキル \(A_i,B_i\) のどちらかを習得していればスキル \(i\) を習得できる。
すでに取得済みのスキルも含め、最大で習得できるスキルの数を求めろ。

制約

\(1 \le N \le 2 \times 10^5\)

解法

\((0,0)\) のスキルからBFSをすればよい。 このとき、\(A_i\) (もしくは \(B_i\) )) を添え字に持ち要素をスキルの添字にするような配列を持てば、あるスキルから次どのスキルを習得できるかが高速に探すことができる。合計ステップ回数が \(N\) 回比例になる。

提出

https://atcoder.jp/contests/abc424/submissions/69510889

いつもvimの置換コマンドを忘れるのでメモ

:%s/置換前/置換後/g

複数行置換したいときは

:10,20s/置換前/置換後/gc

[10,20]行の範囲を置換してくれます。
ほかにも ctrl + o でジャンプ前に戻る、 ctrl + i で取り消ししたジャンプ操作を再実行とか。
ctrl + f ctrl + b がどっちがどっちか分からなくなってしまうこともあります。FとBってFのほうがキーボードだと上にあるのに ctrl + f だと下に動くので勘違いします。
forward と back なんだろうけどキーボードの位置関係のほうが印象が強い・・・。

参考
vim 文字列置換 基本的な事
Vim の「CTRL-O」「CTRL-I」コマンドの直感的な覚え方とジャンプ機能について

デバッグするときに心がけていること

最近業務でデバッグをしていてかなり詰まったけどやることをちゃんとやったらデバッグできたので備忘録としてそのときに考えていたことをまとめる。

  • 現状把握
  • バグが起きる直前直後で何をしていたか
  • 達成したい機能に対してどのようなバグが発生しているか
  • コードを眺めるのも大事だが実際にコードを動かしてみる
  • 原因を探す(breakポイント設定、特定の行をコメントアウト)
  • マニュアル、ドキュメントがあるなら読み返す
  • ここまでやったこと、調べたことをメモに残しておく
  • typoしてるかも?
  • Gitで過去に戻る

基本中の基本なんだけどデバッグしてるときっていい精神状態じゃないことが多い。だからこういうのをあらかじめ書き出しておいてバグにハマったときに見返して機械的にデバッグするのがいいんだろうなぁと思う。
あとはGitでこまめにcommitしておくのはかなり大事。セーブポイントはたくさんつくっておく、未来の自分のために。
私はあまりGitが得意ではないけれどこのコマンド使えたらなんとかなった。
あとは git restore . とかかな。working treeの変更を元に戻すコマンド

Cコンパイラ自作やりたいなぁと1年くらい前から思ってるけど結局触ってないなぁ。いつかやります、いつか。