1. 競プロする人
  2. AtCoder Beginner Contest 053
2024-06-23 18:12

AtCoder Beginner Contest 053

AtCoder Beginner Contest 053

https://atcoder.jp/contests/abc053


↓の提出コードを見ながらの聴取を推奨いたします
A:https://atcoder.jp/contests/abc053/submissions/49613173

B:https://atcoder.jp/contests/abc053/submissions/49613214


Atcoderホームページ:https://atcoder.jp/home

2・5・11・17・23・31日更新予定

#競技プログラミング #Python #podcast

サマリー

すめけくんは、AtCoder Beginner Contest 053で、A問題を解けば、現在のレートが1200未満ならば、AtCoder Beginner Contest ABCに参加します。そうでなければ、AtCoder Regular Contest ARCに参加します。

AtCoder Beginner Contest 053
AtCoder Beginner Contest 053
A問題 ABC、ARC
問題文、すめけくんは現在のレートが1200未満ならば、AtCoder Beginner Contest ABCに、
そうでなければ、AtCoder Regular Contest ARCに参加することにしました。
すめけくんの現在のレートXが与えられます。
すめけくんが参加するコンテストがABCならばABC、そうでなければARCと出力してください。
そのままですね。
プリントでもう直でいきましょうか。
プリント、ABC、IF、INT、
インプットが1200より低ければですね、小なり1200。
エルス、ARCでいけるはず、提出。
はい、ACしたのでB問題いきます。
B問題、A to Z String
問題文、すぬけくんは文字列Sの連続した一部分、部分文字列というを取り出して、
先頭がAであり、末尾がZであるような文字列を作ることにしました。
すぬけくんが作ることのできる文字列の最大の長さを求めてください。
なお、Sには先頭がAであり、末尾がZであるような部分文字列が必ず存在することが保証されます。
アルファベット、AからZがランダムに並んでいて、
AからZを区切る。
Aスタート、Z終わりの最長の文字列数は何文字ですか?ですね。
これなんかインデックスを後ろから調べるみたいなのがあったはずなんですけどね。
ちょっと調べてみましょうか。
Aイコールインプット、で最終的にプリント連文字数なのでっていうとこまで入れとこうか。
たぶんフォグ文とかでも解けると思うんですけど、関数勉強したいので。
Python、インデックス、後ろから。
後ろからのインデックス数を取得する方法は、マイナスインデックス。
あ、違う違う。
インデックス関数なんだよな。
あ、これか。ファインド。
前から検索する。
後ろからRファインド。
はいはいはい。
ファインドが前から検索するだけ?
違うね。インデックス数もちゃんと出てますね。
なので、プリント連S.FINDAとS.RFINDZを1回プリントして何が出るかを確認しましょうか。
6と10。
0、1、2、3、4、5、6、7、8、9、10。
インデックス数は合ってますね。
なので、これをマイナスしたらいいのか。
これZ-Aを出したらもうそのまま文字数になりますね。
なので、プリントS.RFINDZ-S.FINDAに0インデックス始まりだからプラス1するのかな。
出力例1は5文字。
プラス1。
1を他の出力例も見てみましょう。
入力例2は4。
入力例3は12。
12が出たので提出していきます。
2017年のコンテストですね。
ACしたのでC問題をしていきます。
C問題X.YET ANOTHER DAY GAME
問題文。
すぬけくんは6面サイコロで遊ぶことにしました。
サイコロは1から6までの整数がそれぞれの面に書かれており、向かい合う面に書かれた数の和はどれも7です。
すぬけくんはサイコロの好きな面が上向きになるように置いた後、何回か以下の操作を行います。
サイコロを手前・奥・左・右のどれかの方向に90度だけ回転させる。
その後、上を向いている面に書かれた数をYとしてY.L
例えば図のように1と書かれた面が上を向いており、手前側の面に5が、右側の面に4が書かれている状況を考えます。
A問題 ABC、ARC
図に示されるように右方向に回転させることで、3と書かれた面が上を向くようにすることが可能です。
そのほか、左方向に回転させた場合は4と書かれた面が、手前方向に回転させた場合は2と書かれた面が、
奥方向に回転させた場合は5と書かれた面が上を向くようにすることが可能です。
すぬけくんが合計でX点以上を得るために必要な最小の操作回数を求めなさい。
Xは1以上、10の15乗以下。
90度だけ回転させる。その後、上を向いている面に書かれた数をYとしてY点得る。
1から6までの整数がそれぞれの面に向いている。
サイコロを好きな方向に動かせるのであれば、最大値の6と5をひたすら取り続ければいいので、
左方向に回転させた場合は4と書かれた面が最小の操作回数を求めなさい。
Xを受け取って、
Xイコールイントのインプット
で、ワイルXが1以上
ん?Xが1より上だったら続けるで
んーと、X悪イコール6
そうか、割り切れない場合がある?
あるか?そこはあんまり考えなくてもいいか?
んーと、割り切れなかった場合は
あーそうか
えー、アンスイコールX悪6にして
Xマイナスイコールアンスですね。
で、イフ、Xが
んーと、Xがイコールイコール1だったら
6、5、6、5どうしようかな
Xが
んー、0より上だったら何しようかな
Xが0以下になったら
プリントカウントかな?
カウントを0で定義しといて
えー、のどが、失礼
ワイルX代なり1の間
アンスはX悪6
で、Xマイナスイコールアンス
CNT操作回数がプラスイコール1
で、イフ、Xがもうこの時点で0以下になったら
エグジット、プリント、CNT
そうでなければ、エルス
同じやりとりを
今度は5でやればいい
アンスイコールX悪5
で、Xマイナスイコールアンス
で、CNTプラスイコール1
このエルス分の中にも入れとこう
FX、初なるイコール0だったら
プリント、CNT
で、いけるんじゃないかな?ダメかな?
出力で7だったら2
あれ、なんかすごいコードが詰まってる
終了コード9
あ、そうか、Xが1より大きかったらをずっとやってるからか
じゃあ、トゥルーにしとくか
ワイルドトゥルー、無限ループしといてください
え、これでもダメ?
1÷6って何が出るんだ?
ダメか、ちょっとコードテスト
プリント、1÷6、0
0が出る
アンスイコールX÷6
7÷6は何が出る?
7÷6は1ですよね
あ、そうか、1を引いても意味ないなこれ
んーっと
アンスかける6か
Xマイナスイコールアンスかける6、アンスかける5だな
はい、あ、ダメ?
6引いて
Xが0より大きい
アンスイコールX÷5
1÷5は?
1÷5
あ、0か、0になるんだ
そしたらアンスかける5は
そうだね、無くなっちゃうね
んー、じゃあアンスを
マックス1かX÷6
1かX÷5
で、取るようにしましょうか
これで多分いけるんじゃないかな
2、2でしょ
入力例2は?
B問題 A to Z String
27217477801
あ、これでも
そうか、カウントプラス1
毎回1足すだけだと多分これオーバーしちゃいそうだな
あれ、2になった
あ、そうか、これカウントに足すのは
アンスですね、アンサーを足して
これでいける?
249493、絶対違うね
2721だったもんね
んー、どっかがずれてる
なんでだ、そうか
えーっと
交互にやってるわけじゃないんだこれ
だから
あー、そうか、順繰りじゃないから
5にしたり6にしたりじゃなくて
もう6だけで一気にやって
その後5で一気にやってっていうコードに書いちゃってるから
合わないんだなー、解説を見まーす
6面サイコロに対して90度回転をした後
上を向いている面に書かれた整数を
yとしてy.lという操作を何度も繰り返して
合計x点以上得るために必要な最小の操作回数を求めようという問題です
はじめ1、6以外の面が
上を向くように置き
6の面と5の面が交互に上を向くように転がすのが
最適な操作手順です
このように操作を行った時に必要な操作回数を求めれば良く
1速演算でオーダー1で求められます
だからそれが
分かんないって言ってるんだよなー
6たす5で行くのかな、11で
違うかな、ちょっと他の方の提出例を見て
勉強しておきます
ではまた次回
お疲れ様です
18:12

コメント

スクロール