くろたんく雑記帳

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

MENU

AtCoder Beginner Contest 173 参加ログ・感想


内容

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

結果

慣れてきて、ちょっとなめてた。ABペナルティ出しまくってAB2完したのが20分くらい。自分の中でも最低の出来具合。そこから、Cに取り組み、{\displaystyle 2^6 \times 2^6}だから 全探索すればいいと思ったがうまく実装できず。Dも問題文を読んで、おそらくこれかなというところに至ったもの本当にそれが最大値かの証明が自分の中でまとまらず終了。
今回は、本当に最低だった。


どう考えたか + α

A - Payment

問題タイプ:条件わけとmod
支払える最小の{\displaystyle 1000}円札と{\displaystyle n}の差を求める。{\displaystyle 1}の時も{\displaystyle 1001}の時も{\displaystyle 999}となるようにするには、{\displaystyle n \% 1000}として余りで考ればよい。余りでいいじゃんと考えて完全に違えてしまった・・・テスト大事。なんでテスト500とか1000とか意味不明なところでやったんだろうか。。。

n = int(input())
if n % 1000 == 0:
    ans = 0
else:
    ans = 1000 - (n % 1000)
print(ans)

B - Judge Status Summary

問題タイプ:文字列中の特定文字列の数え上げ

最終的な出力はクエリに出てこないものも RE x 0 のように出力しなくてはいけないのでCounterは使えない。 なので、その文字がきたら{\displaystyle += 1}するとして愚直に行う。Aでミスってテンパってたせいか提出時にどうでもいいprint()を入れたまま提出して無駄なペナルティー食らって、テンションだだ下がり。

n = int(input())
s = [input() for i in range(n)]
ac = 0    
wa = 0
tle = 0
re = 0
for i in s:
    if i == 'AC':
        ac += 1
    elif i == 'WA':
        wa += 1
    elif i == 'TLE':
        tle += 1
    elif i == 'RE':
        re += 1
print('AC x ', ac, sep='')
print('WA x ', wa, sep='')
print('TLE x ', tle, sep='')
print('RE x ', re, sep='')

解説の解答例を見て、str.count()かぁと思って、まだまだこういう組み込み関数の理解が乏しいというか思い出せてない。いちいちif文で数え上げる必要なかった。 docs.python.org

n = int(input())
s = [input() for i in range(n)]
for i in ['AC', 'WA', 'TLE', 'RE']:
    print(i, 'x',  s.count(i))

C - H and V

問題タイプ:全探索

制約が小さいので全探索でいけるとは思ったが、行列を複数選ぶパターンの処理をうまく実装できずに解けなかった。きちんと頭整理して別記事でまとめたい。

追記:

blacktanktop.hatenablog.com


D - Chat in a Circle

問題タイプ:最大値算出

ぱっと見ソートして大きいものからpopしていけばできそうな気がしたが本当にそれでいいのかを確認する時間なく解けなかった。きちんと頭整理して別記事でまとめたい。

追記:

blacktanktop.hatenablog.com


おわりに

当面の目標は、ABC完答できればDまでだが、ABでペナルティ食らっているようではまだまだ。過去問でもこんなことはなかったのに悔しい。Cでハマルことが多いのでDを読んだが、Dからやる勇気をまだ持ててない。ちゃんと復習して精進に励むことにする。