ABC281振り返り
3完は、した。が、今まででいちばんメンタルやられた回だった…
B問題4ペナて、ひよこです。ピヨ
300の壁あついよお なんか300になってました!!!!超えた!!!!!!!!
A問題
問題概要
nから0まで改行カウントダウンしてくれよな
考察
- forでiをプリント 以上
コード
#入力 n = int(input()) #逆からfor for i in reversed(range(n+1)): print(i)
感想
Ryusukeさん(鬼)に教えていただいたreversed(range())かなり効き始めている。ありがたや
45秒でA問題解けたのは最速だったんだけれど…しかし……
ちなみに、開始前にターミナルにoj d 前コンテストのA問題idを変えただけのやつ を打っておけば開始と同時にDLできるの知った。
というか、問題文を見ずにサンプル見て判断したことと、もう一つ気になるのが
私のPC、問題文の表示までとダウンロードがなんか遅い。chromeの拡張機能とstarshipが影響している気もする。要研究。
B問題
問題概要
文字列Sが以下の条件を満たしているか判定してね。
- そのいち:頭1文字が英語の大文字
- そのに:真ん中が100000〜999999までの整数
- そのさん:おしり一文字が英語の大文字
考察
- if文を書きまくるやつだ
- そのいち、そのさん、はisupper()で英語の大文字なのかを判断しよう
- 真ん中は切り出して .isdigit()で全部整数なのかを判断し、OKだったら範囲をint()変換して見よう
コード
#入力 s = input() f = s[0] #1文字目 e = s[-1] #最後の文字 n = len(s) #sの長さ m = s[1:-1] #2文字目〜最後から2文字目(整数であってほしい部分) #整数であってほしい部分の判定 Falseならその後の整数判定でバグるためNoを吐き出しプログラム終了 if m.isdigit() is False: print('No') exit() #残りの条件判定 if n == 8: #8文字? if f.isupper(): #最初の文字は英語大文字? if e.isupper(): #最後の文字は英語大文字? if 100000 <= int(m) <= 999999: #整数部分はご指定の範囲内?ご注文はうさぎ?? print('Yes') #よくぞここまで辿り着いたYes exit() #全部違ったらNo print('No')
感想
まさか4ペナするとはおもわなんだ。
手元でいろんなパターン書きまくってエラー原因見つける回だった。プログラミングが下手…でも、学べるものめっちゃ多かった。
- 条件が複数の判定問題については、無理にandで条件を繋げず、ひとつずつ入れ子する。今回は f.isupper() and e.isupper() と書いてて、右項を判断しない問題でやられた
- ifに対してelse:print("no")を連発するのではなく、print("Yes")したらexit()で処理
- 指定範囲に文字列が含まれていた場合、int変換の時にエラーが出るので、丁寧に場合分けしてあげる
- ちゃんとサンプルケースでREする原因を特定してから提出する。もうまぐれでRE解決するほどのレベルではない。いい意味で!
- そして、REが解決したからとてWAが取れるわけではないため、WA原因を特定し修正してから提出するようにする(本当にこれ)
なんか書き出したら怒り(?)落ち着いた。自分に対して怒ってた…散歩しよう。良い散歩を。
C問題
問題概要
n曲のプレイリストがある。各曲の長さはaの数列で与える。では再生!無限ループをするぞ!!さて、t分経った時、何曲目の何秒を聞いてるでしょう。
考察
- 好きなものが題材の問題、とてもほっとする。
- 止まった時間(t)を合計で余剰計算すれば、何ループ目かは関係なく現時点にいるところは確定できる。
- 確定できたら、頭から時間を引き算していこう。
コード
#入力 n,t = map(int,input().split()) a = list(map(int,input().split())) s = sum(a) #合計秒数 now = t%s #止まった時間、合計秒数中のどこにいるか track = 0 #何曲目かを足してく変数 #止まった時間(nowいま)がiよりでかかったらnowからiを引く。トラックナンバーを加算 for i in a: if now >= i: now -= i track += 1 else: track += 1 break print(track,now)
感想
落ち着いて解けたからよかった。
悔しいけど、やっぱり音楽に救われてしまう…てへ
D問題
問題概要
nこの数字からmこを選び足した結果をxとす。dの倍数になる最大のxを探してね。
考察
- ソートして上から順に貪欲しようとする。
- しかしこれは組み合わせの数的に無理だ、あ、まさか、これは噂の…DP…か…
感想
DPのDだよね。それだけはわかったよ。漸化式?数Bだね。おいしそうだね。全菓子機
アルゴ式をがんばります!!!
来週のburiodenは
実はちょっとでかい仕事があるけれど、寝なければ終わるのでがんばります。
土日はなんもないぜ!!いえええええええい精進いええええええええええええええええい
DPとBFSに命を捧げようとおもいます!!!
って、テンションで乗り切ろうとしないようにね。丁寧に場合分け…(トラウマ)