0.はじめに
急に涼しくなってきて体調崩し気味の今日この頃
ABは順調に進みつつCでブレーキ。
久々の2完止まりかと思いましたが、なんとかくりあ。
Dは考えがまとまらないと言うかなんか眠くなってしまい
解けずに終了。歳のせいか22時過ぎのパフォーマンス低下が
きになりました・・・。
レートは-3で732と微減でした。
みんな達にもむずかしかったのかな。
1. A - A - OS Versions
辞書を用意して、XとYを
Ocelotだったら1、Servalだったら2、Lynxだったら3に変換
後は比較してYes or Noを出力してACでした。
https://atcoder.jp/contests/abc426/submissions/69826149
2.B - The Odd One Out
Pythonのcounter関数を使い、Sをキー文字、値個数に変換し
値が1のキー文字を出力してACでした。
https://atcoder.jp/contests/abc426/submissions/69831367
3.C - Upgrade Required
問題を読んで、セグメント木とか使わないとダメなのかなーとおもいつつも
C問題でそれはないかと、以下の考えで実装。
【考え方】(高速化の工夫無し)
1.キー:1~Nの数字、値1の辞書Dを用意(後々考えればリストでよかったな・・・。)
2.~以下q回繰り返し~
-1.XとYを読み込み、iを1~Xまで1ずつ増加させ
D[i]の値をans(初期値0)に加算し、D[i]は0に置換
-2.ansを出力し、D[Y]にansを加算
【高速化の工夫】
・バージョンアップ済バージョンを保持する変数MO(初期値1)を準備
・2-1.の繰り返し時にiを1からではなくMOから開始
・2-2.の後処理でMOをXとMOの大きい方で更新
上記のちょっとした工夫でTLEがなくなりました。
ちなみに、高速化の工夫を思いついて変数MOを実装しながら
ロジックを入れるのを忘れて、1回目はTLEとなってしまいました。
https://atcoder.jp/contests/abc426/submissions/69858358
4.D - Pop and Insert
コンテスト時は、文字列Sを文字種(”0”or”1”)と個数のタプルにし
両端から真ん中の固まり以外を変換する場合の操作回数を・・・
と、訳の分からない方法で実装しようとしていて諦めました。
解説を読んだところ変換対象外とする固まりは真ん中にこだわらずによく
一番大きな塊を避けて変換した場合の操作回数を回答とする事が分かり
目からうろこでした。
https://atcoder.jp/contests/abc426/submissions/69890042
以上