0.はじめに
久々に、A~Cを快調にクリアでき、1時間以上のこしてDに。
でもD問題は複雑で、実装は全然間に合わず、結局
3問でフィニッシュ。
3問解くスピードはそこそこだったためか、レートは11あがり
700台に復帰できました。
1.A - First ABC 2
単純にループしていき、文字列Sの[i:i+3]がABCならi+1を出力し
終了。最後まで一致しなかったら-1を出力して終了
https://atcoder.jp/contests/abc322/submissions/46061289
2.B - Prefix and Suffix
Tをスライスして、先頭N文字・末尾N文字をSと比較して
出力条件ごとの判定をして出力して終了
https://atcoder.jp/contests/abc322/submissions/46068301
3.C - Festival
解説を読むと自分の実装と若干違いました。
・変数N,MとリストAを読み込む
・変数pを0で初期化
・ループを、iが1~Nを取るようにまわす
・i日目の値としA[p]-iを表示
・i=A[p]の時、pに1加算
結構すっきりしているのではないかと自負しています。
https://atcoder.jp/contests/abc322/submissions/46079680
4.D - Polyomino
問題見ただけでスルーしそうになりましたが、E以降も
そんなに簡単そうでもなかったので、頑張ってみました。
結果は1時間以上がんばっても実装しきれませんでした。
実装しようとしていた考えは、
1)ブロックを置く順毎にチェック
(1→2→3、1→3→2、・・・の6種類)
2)ブロックを置くフィールドを用意し、一番左上から
ブロックを置いていく
3)1つ目に置くブロックが、形状的に左上をふさげれば
置いて、置くフィールドの左上から見ていき空いている
マスに、2個目のブロックが置けるかを判定しておく・・・
を繰り返していく、置けなかったらブロックを90度回転して
繰り返す・・・
と、ざっくりそんな感じでやっていきましたが
じかんがたりず、考え方があっているかも判定
できませんでした。
時間があったらリベンジしたいところです。
10/4追記
この問題がどうしても気になって、空いた時間で
回答を進めてました。
久々にプログラム設計書的なものまでまで書いてしまいました。
基本的な考え方は問題なかったのですが
1個目だけ置いた状態のパレットを
とっておいて、2個目をいろいろな角度で
おいていく・・・という過程で、
なぜか、よけておいたリストも更新されてしまう
という現象に苦しめられました。
結局copy.deepcopyでよけておけば
更新されないことが分かりそれを使って書き直したところ
ACとなりました。
https://atcoder.jp/contests/abc322/submissions/46202882
以上