ABC103
ついに…!
A - Task Scheduling Problem
提出コード
いきなり難しくてかなり焦りました。愚直に3通りつくって最小をとりました。
全然気づきませんでしたが、最大から最小引くだけですね…
すごい時間かけた気がしたのですが、終わってみると3分台だったのでよかったです。どうやら不備があったらしくリジャッジ等もあったようでした(自分はよく知りませんでした)。
B - String Rotation
提出コード
いろいろ悩んでたら少し時間はかかりましたが、結局愚直に実装することに。とりあえずsの最初の文字を順番に後ろにくっつけていき、先にTと一致したらYes,Sと一致したらNoを出力、という感じで実装しました。
これも悩む時間で結構危ないかなと思いつつ、実装が割とすんなりいったので良かったです。
C - Modulo Summation
提出コード
modを最近よく見かけるなぁと思いました。mを、~の最小公倍数から1引いた数とすると、すべてのに対して、最大の余りであるになります。なので、結局は~の合計からだけ引くと答えになります。
少し自信がなかったのですが、とりあえず出してしまいました。安心しました。
D - Islands War
提出コード
自分の知識量が少ないおかげで、逆に一目見ただけで方針がたちました。
というわけで蟻本で見たことがあった、区間スケジューリングに似た問題です。
(,)の中で、どこか1箇所を撤去すればその条件を満たせます。1つの橋の撤去で多くの条件を1度に満たせるようにしたいです。
そのためには、入れ子になっている部分を探し出し、一番範囲が短いところで撤去すればよさそうです。
について、昇順でソートします(以降の添え字は、ソート後の添え字とします)。その次に、一番先頭の要素のとその1つ前の島の間の橋(つまり、とにかかってる橋)を撤去して、その場所をとして記憶しておきます(一番最初の要素は、先ほど言った入れ子の一番深い部分になっています)。
次の深い部分を探します。
ソートした要素を順番に見ていって、
今みている要素のが記憶していた地点より前にあれば、そこは目的の場所ではありません。
が記憶していた地点より後になったとき、その区間は次の一番深い部分になっているので、に移動して、橋を1つ撤去します。 この場所を新しいとして記憶します。
これを繰り返して、カウントしていけば答えがもとまります。
というわけで、過去最速の30分台でABC全完できました!(ABConlyなので順位は最高ではなかったです)
ついにレートも水色になりましたー!
もうすぐ夏休みなので、そこでまた知識と実装力を増やしていけたらいいですね!