0.はじめに
久々の3連休となった今日この頃。
今回は、CもDも解けそうでとけず、終了間際になんとかCだけ解けて終了。
レートは-3の758と微減でした。
1. A - Obesity
BMIの問題。
流し読みで適当に提出したら、WAに。
ただしく修正し提出してACに。
HとWの入力順と計算での使用順に違いが
あるのをちゃんと見ていなかった事を反省しました。
https://atcoder.jp/contests/abc467/submissions/77576127
2.B - Keep the Change
釣銭を受け取らないカッコつけ?の人の問題。
SがKeepの時だけB-Aを集計して最後に出力して終了。
https://atcoder.jp/contests/abc467/submissions/77582262
3.C - Adjacent Sums (easy)
単純に一文字ずつ判定していけば何とかなるかと提出してみましたがWAとなりました。
【考え方】
1.M=2であるため、各iでの操作は高々1回
2.プログラムの作り的にA[i]+A[i+1]の余りを変更する場合A[i+1]の方を変える事が前提
3.A[0]を変えるか変えないかによって、回数に違いは出るがA[i]以降は回数は変わらない。
4.上記から、A[0]を変えるパターンと変えないパターンでリストAを変更させたときに
1加算する数が少ない方を選択する方式で解が求まる。
【実装】
1.N,M、A,Bを読み込む
2.A[0]を変えるパターン用のリストAとしてA2を準備し、リストAの内容をコピーする
3.回答用変数ansを0で初期化
4.SにA[0]+A[1]をセット
5.S%MがB[0]と同じ場合
-1.AC(A[0]を変えるパターン用の操作回数)に2をセット
(A[0]を変えるパターンでS%MをB[0]一致させるにはA[0] とA[1]両方に1加算する必要がある為)
-2.AN(A[0]を変えないパターン用の操作回数)に0をセット
-3.A2[1]に1加算(以降の計算で使用するため、A2[0]にも1加算するのが正しいがもう使わないので省略)
5.S%MがB[0]と異なる場合
-1.ACに1をセット(A[0]に1加算して合わせる)
-2.ANに1をセット(A[1]に1加算して合わせる)
-3.A[1]に1加算
6.以下iを1~N-2まで1ずつ加算して繰り返す
-1.SにA[i]+A[i+1]をセット
-2.S%MがB[i]と異なるとき
-1.A[i+1]に1を加算
-2.ANに1を加算
-3.SにA2[i]+A2[i+1]をセット
-4.S%MがB[i]と異なるとき
-1.A2[i+1]に1を加算
-2.ACに1を加算
7.ANとACの小さい方を出力して終了
https://atcoder.jp/contests/abc467/submissions/77642496
4.D - Concentric Circles
問題を読んで2点間の垂直二等分線が交差する=非並行であれば
交差する点を中心にすれば条件を満たせると分かりました。
ただ、並行の判断には傾きを使うので、傾きは同じでかつ
位置も同じであれば、並行と判断しても、条件を満たす円の頂点は
存在することになるので、線が同じという部分の判断方法が
分かりませんでした。
コンテスト後解説を読み、標準化するという手法を知ったので
今後は何とかなるかなと思いました。
https://atcoder.jp/contests/abc467/submissions/77662627
以上