0.はじめに
最近下降気味の成績を挽回するべく参加。
結果はC問題すら解けない惨憺たる成績。
C問題も振り返ればそこまで難解ではなく
レートは-38で737と茶色安定のこの頃です。
1.A - Buy a Pen
A問題ながらちょっとひねった問題。
といっても、素直に言われた通りの実装すれば
迷うことはありませんでした。
Cで指定される色以外の2色の値段のうちminで小さい方を
出力して終了として、ACでした。
https://atcoder.jp/contests/abc362/submissions/55513491
2.B - Right Triangle
後から解説をみたら、三平方の定理を使って直角を求める方法が
紹介されていましたが、コンテスト時は思いつきませんでした。
昔使った(ググって拾って来た)、3点の角度を求める方法で
角A~Cの角度を求めていずれかが90°だったらYes
そうでなければNoを出力して終了としました。
https://atcoder.jp/contests/abc362/submissions/55530776
3.C - Sum = 0
最初に建てた解答方針が間違っていたため、1時間たっても
解けず惨敗しました。
【間違った考え方】
1.整数の組を以下の3つに分ける
L)Lが0より大きい
R)Rが0より小さい
M)LとRの間に0が含まれる
2.Xを作成する際、LはL[i]、RはR[i]を選択する場合が
0に近づくので、その場合の合計値を
Mの値で調整する
https://atcoder.jp/contests/abc362/submissions/55566280
コンテスト時は上記考えで行けると思い込んで四苦八苦していましたが
今思えば以下のようなケースであっさりだめになりました。
2
-2 -1
2 3
コンテスト時に気づけばよかったのですが嵌っているときは
そううまくいかず、時間切れ。
解説をよんだらもっと単純な方法で解決できました。
【考え方】
1.LとRをリストLisに格納しつつ、LとRをLSとRSに集計
2.LSが0より大きいまたは、RSが0より小さい場合は条件を満たすXは作れないのでNo
それ以外はYesを出力
3.LS(XにすべてLを採用した場合のXの合計値)をもとにiを0~N-1の間以下の処理をしていく
→X(以下の処理ではリストans)の合計が0となるまでXにR[i]を格納していく
-1.LSが0の(もうXにR[i]を格納必要がない)時、ansにL[i]を格納
-2.LS+(R[i]-L[i])が0より小さい時(XのL[i]をR[i]に変えてもXの合計が0にならない時)
ansにR[i]を格納し、LSにR-Lを加算
-3.LS+(R[i]-L[i])が0より多くなる時(XのL[i]をR[i]を変えたらXの合計が0以上になる時)
ansにL[i]+LS*-1を格納し、LSに0をセット
4.ansを出力して終了
https://atcoder.jp/contests/abc362/submissions/55589741
以上