くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

AtCoder Beginner Contest 176 参加ログ・感想

ABCまで、Dももうちょっとだった。Cで線形探索すればいいだけだったのに無駄なことで時間を使いすぎた。Dは久しぶりの迷路実装で忘れてた。今日ので復習が大事であることを再確認した。


内容

  • Python3でやっている。
  • 参加ログ。
  • 所感。
  • コンテスト中に何を考えたか。
  • コンテスト後に解説をみたり、少し整理したりしたくらいの内容。
  • 問題の詳細で細かく書こうと思うものは別記事とする。
  • E以上はとりあえず現状自力では無理なのでDまで。解けるようになってきたら更新するかも

結果

Aは割り切れるかどうかで考えて、Bは一つの数字をバラバラにして足し合わせられればよくてすぐ終了。Cは謎のmax値を計算し続ける方式で考えてしまって2ペナ。思い直して線形探索的にやればいいと気づけて久しぶりのABC完答。のこり時間結構あったけど、Dで久しぶりの迷路実装で戸惑ってしまったがBFSを連続的にかませばいいのだろう。


どう考えたか + α

A - Takoyaki

問題タイプ:条件分岐
{\displaystyle n}{\displaystyle x}で割り切れるかどうかでif文で分岐すればいい。割り切れないときは商に1足してから{\displaystyle t}をかければよい。

n, x, t = map(int, input().split())
if n % x != 0:
    ans = (n // x + 1) * t
else:
    ans = (n // x) * t
print(ans)

B - Multiple of 9

問題タイプ:文字列操作・mod
Pythonでは文字列がitereableなので、文字列として読み込んで、forで回してintにしながら足し合わせる。その値が9で割り切れるかどうかで判定すればよい。

N = input()
cnt = 0
for n in N:
    cnt += int(n)
if cnt % 9 == 0:
    print('Yes')
else:
    print('No')

C - Step

問題タイプ:線形探索というのかgreedyというのか
パッと見たときに勘違いして、最大値のindexを判定するように考えてしまったが、それではTLE。もっとシンプルに、頭から見て、max値を保持していく。一つ手前の値よりも小さかったら、その差分をカウントして、そうでなかったら、その値を保持して次の値と比較するイメージ。これは別記事にする。

追記:

blacktanktop.hatenablog.com


D - Wizard in Maze

問題タイプ:迷路・BFS(幅優先探索
今回の迷路問題は、ゴールできるかどうかで場合分けする。できたらワープいらない。できない場合、移動できるところから移動できない場所にワープできるところ全てをスタートとしてゴールにたどり着けるかどうかということを続ける。これは別記事にする。


おわりに

当面の目標は、ABC完答できればDまでということで、久しぶりにABCまでできたけど、C2ペナ。線形探索に気づくのに時間かけすぎた。迷路は久しぶりだったのでしっかり復習する。Cまでできたけど、Rating落ちてちょっと萎えるがペナルティーあったし、そもそも解くのが遅かったし頑張ろう。