0.はじめに
茶色落ち目前のがけっぷちで参加。
A~Cもややこしくすんなりいきませんでしたが何とかAC。
D以降はさらに難易度が上がり1時間かけてもDは解けませんでした。
レートは-8で802とぎりぎり緑に残りましたが、もう誤差の範囲ですね。
1.A - Subsegment Reverse
A問題からなかなか面倒な問題。
1~Nのリストを作って
1~L-1のリスト+L~Rを逆にしたリスト+R+1~のリストを
結合したリストを作り出力
スライス指定の微調整に時間がかかりましたが無事ACでした。
https://atcoder.jp/contests/abc356/submissions/54087286
2.B - Nutrients
素直に計算するだけの問題。
【考え方】
各食品ごとの栄養素リストを読み
Aの栄養素リストから引いていく。
最後にAの栄養素リストを先頭から見て
0より大きいものが残っていればNo
残ってなければYesを出力して終了
https://atcoder.jp/contests/abc356/submissions/54092020
3.C - Keys
鍵の数が最大15と少なめなので
全パターンをbit全探索で調べることはわかったので
あとはそれの実装方法を考えるだけでした。
【実装】
1.N,M,Kを入力
2.テストで使用した鍵リストを保持するリストLを初期化
3.テスト結果を保持するリストRを初期化
4.以下M回繰り返し(テスト結果読み込み)
-1.リストlに1行入力
-2.リストAにlの2文字目からl[0]文字格納(テストで使用した鍵リスト)
-3.リストANにリストA-1をint型として格納
-4.LにANを追加
-5.Rにl-1を追加
5.答え用変数ansを0で初期化
6.以下2のN乗回繰り返し(変数i=回数)
~ビット全探索用鍵リスト作成(リストPの0は偽物のカギ、1は本物のカギ)
-1.変数bに”f'{i:0=15b}'”(iを15桁0埋めの2進数に変換)
-2.リストPにbの15-N桁目以降をリスト化してセット
-3.変数okに1をセット(リストPの内容でテストケースがすべて正しければ1)
-4.以下M回繰り返し(変数j=回数)
-1.変数ca(j回目のテスト時に本物の鍵を使った回数)に0をセット
-2.リストL[j]を先頭から読み出しcaにint(P[k])を加算
-3.caがK以上でR[j]が"o"の時は何もしない(テストケースと鍵の真偽が一致)
-4.caがK以下でR[j]が"x"の時は何もしない(テストケースと鍵の真偽が一致)
-5.-3、-4以外の時はokを0に変更(テストケースと鍵の真偽が一致しない)
-5.ansにokを加算
7.ansを出力して終了
bit全探索はもう少しスマートな実装があった気がしましたが
力技になりました。
無事、TLEもでずACでした。
https://atcoder.jp/contests/abc356/submissions/54115101
以上