0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

0.はじめに
 今回の問題は、全体的に難易度が低かった気がします。(相性が良かった?)
 記憶にある限り初めてのA~E制覇で、レートも700台にupしました。

  1. A - Filter
     インプットしたリストを頭からチェックして
     答え用のリストに偶数だけ格納して
     最後に表示。と、素直に解きました。

 最近以下の書き方で、リストを横一列にスペース区切り表示できることを知り
 役に立っています。

ans=[1,2,4]
print (*ans) # 1 2 4 

 https://atcoder.jp/contests/abc294/submissions/39846002

2.B - ASCII Art
 数字をアルファベットに変換する方法を探すのが面倒だったので
 前からよく使っているA~Zの文字列を使い、ここから必要な文字を
 アドレス指定で取り出す方式で実装しました。

 https://atcoder.jp/contests/abc294/submissions/39851228

3.C - Merge Sequences
 制約から、Aのリストと、Bのリスト内で重複する数字はないことが
 わかったので、以下の方法を思いつき実装してACでした。

 考え方
  1.リストAとリストBを合わせたリストCを作りソートする。
  2.Cを頭からインデックスiで読み込み、辞書にKEYC[i]=iを登録していく
  3.リストA内の順番用リストALとリストB内の順番用リストBLを用意する。
  4.リストAを頭からインデックスiで読んでいき、辞書キーA[i]の値+1を
   AL[i]に格納していく
  5.リストBについても同様の操作を行う。
  6.リストALとBLを表示する。

 https://atcoder.jp/contests/abc294/submissions/39857220

4.D - Bank
 まず、呼ばれた人リストを作ってその人が窓口に行ったらリスト削除
 という形で実装したけどTLE。
 リストではなく、辞書で実装したけどTLE
 と、八方ふさがりでしたが、問題を読み返して
 呼ばれた人リストはいらないし、制約が丁寧なので
 今何番まで呼ばれたかもいらないな・・・。などということに気づいたので
 以下の考え方で実装をしてAC。

 制約ががっちりしているから解きやすく感じました。

 考え方
  以下の変数を準備し、それぞれ以下のように扱う
   1)P1(数値) ・・・ イベント1で次に呼ばれる人を保持。
              イベント1が来たら1加算
               まぁこの後使わないけど。

   2) P2(辞書) ・・・ 受付に来た人を保持
              イベント2が来たらその番号を登録
  
   3) P3(数値) ・・・ 前回イベント3で呼ばれた番号を保持(初期値1)
              イベント3が来たら、P3の番号が
              P2に存在するかをチェック。
              存在しない=呼ばれてない
                   =その数字がイベント3で呼ばれる
              存在する=P3に1加算しその番号をチェック
                   以下存在しない番号までループ

 https://atcoder.jp/contests/abc294/submissions/39869595

5.2xN Grid
 素直に解いたらTLEまっしぐらな感じ。
 でも、尺取法(と言っていいのか微妙だが)ぽく、
 A列をもとにB列をチェックしていけば
 解けるのでは!?と思い実装→解けました。

【考え方】
  1)1行目の情報を、リストNL1に格納。形式:”NL1[i]=(V[1][i],L[1][i])”
  2)2行目の情報を、リストNL2に格納。形式:”NL2[i]=(V[2][i],L[2][i])”
  3)一致したマス目の数ansとNL2のチェック対象アドレスjを定義(いずれも初期値0)
  4)NL1に格納されたアイテムを、1つずつチェックしていく。(インデックス変数=i)
   4-1)NL1[i][0]を比較値変数V1に、NL1[i][1]を比較長変数L1にセット
   4-2)フラグ変数に0をセット
   4-3)フラグ変数が1になる(L1が0になる)まで以下を繰り返し
    4-3-1)NL2[j][0]を比較値変数V2に、NL2[j][1]を比較長変数L2にセット
    4-3-2)L1=L2の時(現在比較中のリストについて圧縮長が同一の時)
     4-3-2-1)V1=V2の時(現在比較中のリストについて値が同一の時)
     4-3-2-1-1)ansにL1を加算(比較中リストの圧縮長を加算)
     4-3-2-2)jに1を加算(次回の比較はNL2の次のアイテムを対象)
     4-3-2-3)FLGに1をセット(現在比較中のNL1のアイテムは終了)
    4-3-3)L1>L2の時(現在比較中のリストについてL1の圧縮長が長い時)
     4-3-3-1)V1=V2の時(現在比較中のリストについて値が同一の時)
     4-3-3-1-1)ansにL2を加算(比較中リスト2の圧縮長を加算)
     4-3-3-2)L1-L2(L2との比較に使用した分のL1は短くする)
     4-3-3-3)jに1を加算(次回の比較はNL2の次のアイテムを対象)
    4-3-4)L1<L2の時(現在比較中のリストについてL1の圧縮長が短い時)
     4-3-4-1)V1=V2の時(現在比較中のリストについて値が同一の時)
     4-3-4-1-1)ansにL1を加算(比較中リスト2の圧縮長を加算)
     4-3-4-2)NL2[j][1]-L1(L1との比較に使用した分のL2を短くするため
                 NL2リストの値を減らす。)
     4-3-4-3)FLGに1をセット(現在比較中のNL1のアイテムは終了)
  5)ansを出力

 書き起こすとややこしくなりましたが、考え方は単純です・・・。

 https://atcoder.jp/contests/abc294/submissions/39874226

以上

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?