れとろのメモ置場

とあるSEのメモ置場

HHKBプログラミングコンテスト2023(AtCoder Beginner Contest 327)

HHKBプログラミングコンテスト2023(AtCoder Beginner Contest 327)に参加しました。

結果

A,B,C,Dの4問正解でした。

B問題でのしょぼいミスのせいでWAを連発したのがちょっとつらい…

D問題もちょっとした見落としでWAしたので全体的にペナルティが痛かった。

A - ab

問題文のとおりに処理する問題。

与えられた文字列にabかbaが含まれているかどうかを判定して答える。 文字列の初歩的な処理ができれば解ける問題だと思う。

B - A^A

Bが与えられるのでB=A ^ {A}となるAがあるかどうかを答える問題。

Bは最大で10 ^ {18}なのでAの候補は最大でも16くらい。
なのでオーバーフローしないように型を気にしながら16以下のA ^ {A}をそれぞれ計算していく。 計算結果がBと一致するかどうか探して一致したらそのAを答える。

別解としては数学でゴリ押しな解き方もできそう。 A ^ {A} = Bの両辺に log_A{}を取って計算すると  A = log_A{B}になるのと、 log_A{B} = \frac{\log_x{B}}{\log_X{A}}だったと思うでの、 ライブラリのlog計算でlog_A{B} = \frac{\log_x{B}}{\log_X{A}}を計算して出てきたものが整数になるかどうかでA が存在するかどうかを判断できると思う。

C - Number Place

9 \times 9のマスに1~9が書かれているので、この内容が数独の解として成立しているかどうかを判定して答える問題。

横一列と縦一列、3 \times 3のマス目で見たときの3パターンそれぞれ順番に判定を行っていけば特に困らず解けると思う。

今回はマス目の数字が1桁だけなので各数字を文字とみなして、9マス分の数字を1つの文字列にくっつけた。 その後その文字列をソートして、ソート結果が123456789となっているかどうかで、ある9マスが条件を満たしているかどうかを判断していった。

D - Good Tuple Problem

はじめはよく分からなくて色々考えていったけど、結論としては二部グラフかどうかの判定問題だった。

2つの数列S,Tが与えられるけど、S _ {i} とT _ {i}が1組の辺となる。 なので、ノード同士の接続状況を整理したら後は各ノードに色を塗りながら深さ優先や幅優先で探索していって、 二部グラフかどうかを判定する。

単純に二部グラフの判定問題として出題すると簡単に解かれそうだからちょっとひねった問題の書き方を しているように見える。