cplusplusonly's memo

Atcoder: https://atcoder.jp/users/cplusplusonly

AtCoder ABC137 参戦記

今までは退職 -> 引っ越し -> 旅行 -> 転職で忙しかったので AtCoder はコンテスト参加だけしかできていませんでした。ようやく落ち着いたので。久々の参戦記になります。

AtCoder の ABC 137 に参戦しました。

atcoder.jp

結果は 65 分で ABCDE *1 の 5 問 (2 WA) となり、パフォーマンス 1900 で青復帰となりました。

f:id:y_r:20190813232349p:plain

感想

A 問題、 B 問題

やるだけ。

C 問題
  • 文字の使用数が同じ文字列の個数を数える
    • 文字列内をソートして使用文字を a から並べる
    • 文字列間でソートして辞書順にする
    • 上からなめて個数を数える
  •  n 個が同じなら個数は  n*(n-1)/2
  • 使用数が違う文字ごとに上記を加算する

std::string ってソートできるのを初めて知った。

D 問題

報酬期限の後ろの順にタスクを並べてゆけばよい。あとは priority_queue を用意して後ろの日から以下の操作を行う。

  • その日期限のタスクをすべて追加する
  • タスクの中で一番報酬の高いものがその日のタスク
E 問題

ワーシャルフロイドをやればよい。ただし閉路はスタートからゴールに到達できるパスの中にあるものだけがエラーになる。
ここまで考察して実装。閉路検出は step n から 2n までの間にゴールの価値が更新されれば NG。

で提出して AC をもらったが、上記は例えば直行するときの報酬が 10n でループの報酬が 1 のときに 10n と答えてしまうが正しい答えは当然 NGで嘘解法。
たぶん真面目に閉路の到達可能性をチェックする必要があるはず。

F 問題

この手の問題は苦手...

*1:ただし E は嘘解法