0.はじめに
今回は順調に30分ほどでDまでクリア。
E以降を解いて一つ上のステージに行けるかと思いましたが
やはり壁は厚く、EもFもACにたどり着けませんでした。
それでも、レートは+23といい感じに上がりました。
1.A - Spread
文字列をリストとしてインプットし
print(*リスト名)で表示するだけの簡単なお仕事でした。
https://atcoder.jp/contests/abc329/submissions/47674240
2.B - Next
いろんな解き方がありそうですが、ぱっと思いついた以下の方法で。
【考え方】
・リストAを読み込み最大値igを取得
・リストAからig以外を抽出したリストl2を作る
・リストl2の最大値を表示して終了
https://atcoder.jp/contests/abc329/submissions/47679719
3.C - Count xxx
問題文を一読し、重複を許さない=アルファベット毎の
最大連続数の合計が答えになる。
と、分かったのでその後はすんなりいけました。
【考え方】
・辞書Dを用意する
(キー:アルファベット、値:アルファベットの最大連続数)
・文字列Sを先頭から見ていく
前の文字と同じとき:連続数を加算
前の文字と違うとき:
・辞書Dに前の文字と連続文字数を登録
既に登録されている場合は、連続文字数を
元の数字と現在の数値の大きい方で更新
・現在の文字を前の文字にセットし、連続数に1をセット
・最後に辞書Dの値を集約して表示して終了
ポイントとしては、文字列を先頭から見ていくfor文が
終わった後の処理も忘れずに。というところくらいです。
https://atcoder.jp/contests/abc329/submissions/47693950
4.D - Election Quick Report
TLEを何とかする問題なんだなーとおもいつつとりかかる。
【実装】
・以下の変数を準備
候補者毎の得票数リスト:S、
現在得票数トップの人 :now
現在トップの得票数 :nowS
・リストを先頭から見ていく
・候補者ごとの得票数リストに加算
・加算した得票者の得票者数がnowSと同じになった場合
→加算した得票者の番号がnowより小さいとき
→nowを加算した得票者の番号に置換
・加算した得票者の得票者数がnowS以上になった場合
→nowを加算した得票者の番号に置換
→nowSを加算した得票者の得票数に置換
・nowを出力
今改めて整理してみると、nowSは
要らなかったな・・・と思いました。
https://atcoder.jp/contests/abc329/submissions/47700563
5.E - Stamp
コンテスト時はしばらく考えてもTLEを解消する方法が
思いつかず、Fに取り掛かりました。
コンテスト後、解説を見て、スタンプを押したことが分かったら
その周りをさらに調べていくという順番で解いていくことが分かり
参考にしたところすっきり解けました。
https://atcoder.jp/contests/abc329/submissions/47742870
6.F - Colored Ball
Eから逃れてたどり着いたところ、なんとなく行けそうな気が
したのですが、TLEが消せませんでした。
TLEが6個なので、何とかなるかと思い
あの手この手を試しましたがコンテスト時間は無情にも過ぎました。
解説を見たら、ボールの種類を統合する時
単純にA→Bへ統合ではなく、多い方から少ない方に合わせてから
合わせた結果でBを置き換える事が書いてあり、その通りにするとあっさりAC。
setを使うのに慣れていないので、高速化のコツとかも
徐々に学ばないといけないなと思いました。
https://atcoder.jp/contests/abc329/submissions/47741846
以上