0.はじめに
本当にじわじわとレートが上がっている今日この頃。
Cまで順調に解け、Dも意外とあっさりとクリア。
これはひさびさにEがいけるか?!と思いましたが
さすがにそうはうまくいかずに終了。
それでも4問正解が効いて+10の766となりました。
1. A - Count .
素直に問題通り文字列Sを先頭から参照し、iとjの数を数え
出力して終了でACとなりました。
https://atcoder.jp/contests/abc442/submissions/72677978
2.B - Music Player
こちらはバッチ処理的な問題。
状態を表す変数V(ボリューム値)とM(音楽がかかっているかを表す)を
用意し、インプットごとに状態を変え、判断してYes or Noを出力しました。
https://atcoder.jp/contests/abc442/submissions/72685409
3.C - Peer Review
素直に解いたらTLEになる・・・かとも思いましたが
査読者の組み合わせが何通りあるかの求め方は
普通公式でもとめるか・・・と思うとまぁ素直に言っても行けるのかなという問題。
【考え方】
1.研究者毎に利害関係がない人の人数を求める。
2.利害関係がない人の人数毎に以下の方法で答えを求め出力
・利害関係者のない人の人数が2以下の人は0通り
・利害関係者のない人の人数が3の人は1通り(4の式でも同様の結果になりますが・・・)
・利害関係者のない人の人数xが3以上の人は(x×(x-1)×(x-2))÷6通り
すんなり解けました。
https://atcoder.jp/contests/abc442/submissions/72694791
4.D - Swap and Range Sum
ぱっとみややこしかったですが、入れ替えが前後の値だけなので
意外と簡単に行けました。
【考えかた】
1.リストAの累積和リストLを作成
2.クエリー1の際には、リストAの該当値の入れ替えに加え
リストLの該当値の更新L[x]にA[x+1]-A[x]を加算
3.クエリー2の際は、L[r]-L[l-1]を出力
indexの細かい点は実際リストを出力したりしながら微調整して
ACを頂けました。
https://atcoder.jp/contests/abc442/submissions/72708937
5.E - Laser Takahashi
問題自体はそれほど複雑ではない為、行けそうと思い取り掛かりました。
【考え方】
~モンスターの位置リストを読み込んでの前処理~
1.原点から見た各モンスター位置の角度を求めモンスター毎にどの角度にいるかを保持する
2.同じ角度にいるモンスター数は集計し、角度毎のモンスター数と0度から
その角度までのモンスター数を求める
~思考実験毎の処理~
3.入力されたモンスターを元に累積和を利用して消されるモンスターを求める
なかなかいい感じにプログラムは組めて、テストしたところ例題の1番目と2番目の結果が
逆になってしまい、そこがクリアできず時間切れ。
コンテスト後解説を読んだら、atan2での角度計算は角度が反時計回りに出てくるようで
実験のAとBを入れ替えたらうまくいきました。
が、AとBを入れ替えるプログラムで提出してみると、WAが2個出てきました・・・。
(WA2個)
https://atcoder.jp/contests/abc442/submissions/72736954
これはおそらく、解説にある”浮動小数点誤差による大小関係の誤判定”何だろうなと思い
外積を用いる方法を元に再提出してACをとれたかと思いきや今度は違うところがACに。
(WA1個)
https://atcoder.jp/contests/abc442/submissions/72751475
テストケースが公開されたら再チャレンジしてみようかなと思います。
と言いつつしない気もします。
以上