0.はじめに
全体的に難易度が1段ずつ高い感じがしました。
C問題見た時はあきらめモードでしたが何とかACになり
結果としてレートは-2で収まりました。
そういえばレート変動が結構すぐ反映された気がします。
DはDP問題だったので断念。いい加減覚えないと次に進めないな・・・。
1.A - flip
なんか、スタイリッシュな方法があるだろうなと思いつつ
愚直に1文字ずつ見て反転した文字列を作る形でACでした。
解説見るといろいろ書いてあったので、覚えておくと今後役に立ちそうでした。
https://atcoder.jp/contests/abc289/submissions/38783122
2.B - レ
ややこしい問題でしたが、問題文が詳細で
参考にしてロジックを組めば解けました。
考え方
1)変数N,M、リストAをそれぞれ入力する
2)出力用のリストL、反転用リストTL、レ点アドレスLiを用意する
3)for文で変数iを1~Nまで回す
3-1)変数iをTLに格納
3-2-1)A[Li]=iの時(レ点がついてる時)
Li+=1
3-2-2)A[Li]!=iの時
またはリストAの最後まで使い切ったとき(Li>=len(A))
3-2-2-1)TLを降順ソート
3-2-2-2)TLを頭から順にLに格納
3-2-2-3)TLを初期化
4)Lのリストをフォーマットに従い出力
で、AC頂けました。
https://atcoder.jp/contests/abc289/submissions/38793863
3.C - Coverage
最初は問題文の意味が分からず諦めかけましたが
3回くらい読んで何とか理解できました
要は、M個の集合の全組み合わせでそれぞれ集合を作り
その中に1~Nまでの数字がすべて含まれるのはいくつあるか
ということと理解しました。(書いてみると問題文とあまり変わりませんが)
考え方
1)itertoolsをインポート
2)2次元表Lに[M個分の集合][集合の要素]を入力
3)for文でiを1~Mまで回す(集合に使う集合数にiを使用)
3-1)fo文で変数itlに、itertools.combinationsを使用して
0~M-1から、i個選んだリストを格納しそれぞれ以下の処理
3-1-1)リストPにリストL内のitlにある集合を順に読み出し格納
3-1-2)Pを昇順ソート
3-1-3)変数chkに1をセット
3-1-4)リストPを順に読んでいき、P[i]がchkと一致したらchkに1加算
3-1-5)リストPを読み終わった後、chkの値が、N+1であれば
条件を満たす集合なので変数ansに1加算
4)変数ansを表示
https://atcoder.jp/contests/abc289/submissions/38809378
以上