0.はじめに
珍しく一日外出しており、疲労困憊で参加。
そのせいか、相性が悪かったのか、C以降が解けず
ひさびさの2問のみの正解。
とはいえ、みんな芳しくなかったのか、レートは-12で済みました。
1.A - Buildings
問題文はややこしめでしたが、実装すると楽な感じでした。
一つ目のビルより高いビルがあるかを
2つ目以降順にみていきあったらその位置を出力して終了
なかったら-1を出力して終了。
で、AC頂きました。
https://atcoder.jp/contests/abc353/submissions/53321164
2.B - AtCoder Amusement Park
日常によくありそうなシチュエーションだったため考えやすかったです。
【実装】
・スタートカウント変数Sを0で初期化
・現在の座席の空きNKをKで初期化
・以下A[i](リストを先頭から一つずつ読み込む数)を順に処理
-A[i]がNK以下の場合(まだゴンドラに乗れる)
-NKからA[i]をマイナス
-A[i]がNKより大きい場合(もうゴンドラに乗れない)
-Sに1加算
-NKにK-A[i]をセット
・最後にS+1を出力して終了
(繰り返しの最後のゴンドラにだれか乗っているので)
https://atcoder.jp/contests/abc353/submissions/53330684
3.C - Sigma Problem
コンテスト中は正解できませんでしたが、解き方の方向性は
あってたようです。実装がうまくいかずに限界を感じました・・・。
解説の解答例を見て、出力方法が合点行きました。
【実装】
1.変数ansに余りを取らなかったときの合計をセット
-ans=(N-1)×sum(A)
2.Aを昇順ソート
3.余りが発生する組み合わせ変数Mに0をセット
4.各数毎の余りが発生する限界位置変数mにNをセット
5.mod用変数pに10の8乗をセット
6.以下iを0~N-2まで繰り返し
-1.mにmとi+1の大きい方をセット
-2.以下m-1がiより大きいかつA[m-1]+A[i]がp以上の間
-1.mから1マイナスする。
(mを大きい方からずらしていき、A[i]と足した場合にpを超える
=mod計算が必要な位置の最大 を探る)
-3.MにN-Mを加算
7.ansからp×Mを減算した値を出力して終了
https://atcoder.jp/contests/abc353/submissions/53394600
4.D - Another Sigma Problem
Cが難しかったのでいったん見たけど、同じような難しさと思い
Cに戻りました。
解説を読んで、こちらの問題は最終的な合計のmodを取ればよい事が
わかり、これは解けたかもな・・・と思いました。
【考え方】
・リストの一番後ろの数をA[N-1]とすると、
A[N-1]を含む関数fの合計は以下となる
A[0]×(10のlen(str(A[N-1])))乗~A[N-2]×(10のlen(str(A[N-1])))の
合計
上記を、A[N-1]~A[1]まで求めて合計し最後に998244353でmodを取って
出力する
解説の楽な実装が同じようなイメージ化と思います。
https://atcoder.jp/contests/abc353/submissions/53396195
以上