1. 競プロする人
  2. AtCoder Beginner Contest 058
2024-03-05 26:02

AtCoder Beginner Contest 058

AtCoder Beginner Contest 058

https://atcoder.jp/contests/abc058


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

B:https://atcoder.jp/contests/abc058/submissions/47390345


Atcoderホームページ:https://atcoder.jp/home
00:03
AtCoder Beginner Contest 58回目、A問題。読めない。
問題文。3本の柱が等間隔に並んでいます。柱の高さは左から順に、Aメートル、Bメートル、Cメートルです。
柱の先端が同一直線上に並んでいるとき、つまりB-AイコールC-Bを満たしているとき、この柱の並び方を美しいと呼びます。
柱の並び方が美しいかどうかを判定してください。
B-AイコールC-Bだったら、イエス。そうでなければ、ノーを提出すればいいので、そのままですね。
A、B、Cを受け取ります。マップ。イント、インプット、ドットストリート。
プリント。イエス。
イフ。B-AイコールC-B。B-AイコールイコールC-B。
エルス。そうでなければ、プリント、ノー。提出。
ACしましたので、B問題いきます。
B問題。これも読めないですね。
問題文。すぬけくんは新しくできたプログラミングコンテストに会員登録しました。
登録に使ったパスワードを覚えておく自信がなかったすぬけくんは、手元の紙にパスワードをメモしておくことにしました。
ただし、そのままメモをすると誰かにパスワードを盗まれてしまうかもしれないので、文字列の偶数番目の文字と奇数番目の文字をそれぞれ別々の紙にメモしておくことにしました。
パスワードの奇数番目の文字だけを順番を変えずに取り出した文字列と、偶数番目の文字だけを順番を変えずに取り出した文字列Eが与えられます。
すぬけくんの代わりにパスワードを復元してください。
入力例がXYZとABCの場合、XAYBZCですね。交互にやります。
どっちかが1文字足りない可能性もあるのか。どうしようかな。
とりあえずABでインプットを取っておいて。文字列は最大50でしょ。じゃあポップで取るか。
03:26
Aイコールリストインプット。Bも同じくリストインプット。
ファイル連Aが0より多いかOR連B&にしておくか。
ファイル連A大なり0&連B大なり0。これでどっちかがなくなるまで出し続けます。
小文字のAイコール大文字A.POP。小文字のBイコール大文字B.POP。
POPが確か一番左の要素を取り出すあれだったはずなので。
外にアンサーからの文字列を用意しておいて。
アンスプラスイコールAプラスB。プリントアンスしておこうか。ちょっと確認。
コードテストじゃなかったこれ。コードテストにコピペして。
入力例1をちょっと試してみましょう。
Z、C、Y、B、X、A。右端から取ってるな。
ってことは逆順にすればいいんだ。
リストを反対にします。コロンコロンマイナス1で逆順になりますね。
X、A、Y、B、Z、C。OKですね。
文字列の長さが違う場合どうするかっていうのが。
06:10
IF連Aが1だったらプリントアンスプラスAの0番目。
IF連Bが1だったらプリントアンスプラスBの0番目。
そうでなければELSEプリントアンサーでいいんじゃないでしょうか。
提出していきます。
ACしましたのでC問題いきます。
問題文。
すぬけくんは文字列の書かれた紙から文字をいくつか切り抜いて並び替えて別の文字列を作るのが好きです。
明日になるとすぬけくんは文字列S1からSNのうちどれか一つが書かれた紙がもらえます。
誰かな。
すぬけくんは文字列を作ることをとても楽しみにしているので、どんな文字列を作るか計画を立てることにしました。
ただしすぬけくんはまだどの文字列が書かれた紙がもらえるかを知らないため、どの文字列が書かれていた場合にも作れる文字列を考えることにしました。
Sのどの文字列が書かれていても作れる文字列のうち最長のものを求めてください。
最長のものが複数ある場合は辞書順で最小のものを求めてください。
制約がかなり小さい。
入力は以下の形式で標準入力から与えられる。
Nが与えられてその後S文字列がN個分与えられる。
条件を満たす最長の文字列のうち辞書順で最小のものを出力せよ。
その無用の文字列が空文字列である場合は空行を出力せよ。
入力例1 Nは3 S1 C B A A S2 D A A C C S3 A C A C A C出力例1 A C C あ違うA A C
C B A A D A A C C A C A C A Cのどの文字列からもA A A A C A C A C A Aなどが作れます。
09:08
そのうち最も長いものはA A C A C A C A Aです。
この中で辞書順最小のものはA A Cです。
つまり辞書で判定していくってことか。
辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で
辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で
辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で辞書で
12:41
S1を一番最初に入れておこう listInput.sortで4iinRangeN S2イコールlistInput.sort
違うわRangeN-1だ ちょっとプリント で確認しておこう S1の順番がちゃん
と辞書順というか入れ替わっている かnoneが提出されたsortedにする
かsortedlistInput.sort関数とsorted 関数がまだちょっと分かってないん
だよな オーケーオーケーsorted 関数ならちゃんと小順になって
で 何しようとしたんだ カウント どうしようかな 4文の前にtmpでs1.join
15:02
からの文字列で 4jinRangeN S2でいいか で 出た 分かんなくなってきちゃ
った ちょっと無理だな 寝起き だからという言い訳をしつつ解説
を見ていきます 諦める c問題 最長の文字列を作る
にはできるだけ多く文字を作った 方がいいです 答えとなる文字列
に使えるaの数をcaとします また cbからczについても同様に定義
します つぬけくんが文字列を作る 時にaをけいこ使うためにはどの
文字列にもaがけいこ出てきている 必要があります よってcaはaが最も
少ない文字列に出てくるaの個数 となります 同じことが他のbから
zまでの文字についても言えます 辞書順で最小の文字にするためには
aから順番に並べればよいので 答えはaのca個分 bのca個分zのcz個分
となります つまりどういうこと アルファベット用意すればいいのか
ちょっとこれ解けそうだな 解け そうっていうかもう解説見ちゃってる
からあれですが アルファベット を用意してカウントしてだな ちょっと
解けるかもしんないな どうしよう かな Pythonでアルファベット順の
リスト作るの結構簡単だったはず なんですが Pythonアルファベット
小文字これ大文字はない 小文字 だから小文字のアルファベット
18:07
の作り方 あれなんかもっと簡単な やり方あった気がしたんだけど
これをそのままコピペしよう for i in range 97から1 123でcharのi これは
リストに入れたらいいからプリント になってるのを消してlイコール
からのリスト l. いやリストにする べきか 違うな ディクショナリー
だな イコール でディクチャー1 イコール0 で初期化しておいてプリント
ディクで確認 aからzで辞書の確認 ができました for i in range n そうか
どうしようかな lイコールからの リスト lにもabcdefghijklmzまで入れ
ましょうか l.appendcharの入り場 名 でプリントlもちょっと確認して
おいて オッケーですね これでアルファベット 順のディクショナリーとアルファベット
順のリストができました for i in range n sイコールインプットでfor
小文字l in大文字l アルファベット 順にチェックしていきます s.count
21:18
s.countをscにしておこう scという 変数にs.countlを入れておきます
dictionaryのl番目のアルファベット の数がscより大きかったら入れ
替え dictionaryのl番目はscにします 小さい方にします for小文字l in
大文字lプリントdictionaryのl番目 小文字lかけるdictionaryのl番目
で エンドイコールからの文字列 から1回プリント 出ないね 出ないね
なんでだ ちょっとdictionaryとlを 確認しましょうか もう23分経ってる
全部0になってんな 全部0になってんな なんで そっか やっぱり元々の文字
24:11
列はいるのか じゃあn-1で大文回す のがあってたんだな だから1個目
の文字は別のループでカウント しておかないといけないので ちょっと
コピペします めっちゃ汚くなった な 見にくいな 変わらんな あれ なんで
だ こんだけ悩んで解けんか そうか ユーザー解説も一応見ておき
ましょう 解説放送です 書いてるわ すべての文字列に含まれる文字
は入れ替えてok つまり文字の順番 は関係ない まずcのic番目 i番目
の文字列に文字cが何個あるかを 計算する 全ての文字列で作れる
共通文字列にある文字cが使える 回数はmaxを そして辞書順最初の
ものを出力する必要があるため その 回数分文字をくっつけるが
辞書順で小さい文字からくっつけて いく 考え方は分かるんだけどな
実装ができないな ちょっとまた 見ておきますね 他の方のバイソン
の提出例 ではまた次回 お疲れ様です
26:02

コメント

スクロール