LoginSignup
0
1

0.はじめに
 今回は全体的に難易度が高かった感じでした。
 結局D問題はACできずレート-10で終えました。

1.A - Similar String
 いつものスマートに行きそうな気もするけどめんどいので
 SとTを一文字ずつ比較し、似た文字列の条件の組を数えて
 文字数と一致したらYesを出力と、実装しました。
 後で、解説よんでも同様の解き方でした。
 ユーザー解説の方は0をoに1をiに置き換えて判断と
 いく分スタイリッシュな解き方が書いてありました。

 https://atcoder.jp/contests/abc303/submissions/41730540

2.B - Discord
 Bの割に難易度高くなーい?と思いつつ解いたら意外と早く解けました。
 隣合わせの組をキーにして辞書登録して、最後に全組み合わせについて
 辞書にあるかをチェックする形で実装しました。

 実装
  1.NとMを読み込み、初期化した辞書dictとansを用意する
  2.リストを1行ずつリストAに読み込む
   2-1.リストAを、0~N-2までのインデックスで順に読み込む
    2-1-1.pにA[i]とA[i-1]の小さい方をセット
    2-1-2.qにA[i]とA[i-1]の大きい方をセット
    2-1-3.str(p)+str(q)をキー、値1を辞書に登録
  3.インデックスiを1~N-1まで繰り返す
   3-1.インデックスjをi+1~Nまで繰り返す
    3-1-1.str(i)+str(j)をキーに辞書を検索
     3-1-1-1.辞書にない場合にansに1を加算
  4.ansを表示
 
  実装時に3-1-1.の部分でわざわざiとjの大小を気にしてしまいましたが
  今考えると、i<jは保証されてるなと思いました。

 https://atcoder.jp/contests/abc303/submissions/41740355

3.C - Dash
 ややこしい問題でした。
 実装方法は悩みましたが、高度な数学的知識とかは不要で
 TLEも考慮しないでよい問題でした。

 考え方
  ・アイテムの場所は辞書で管理。
   ・キーはB座標を文字列として結合
   ・使用したかどうかは、辞書登録時に値を1にしつかったら0にしておく
  ・文字列に従って、主人公の座標を動かしていく
  ・動かした時点でHPを減算し、-1だったらNoを出力して終了
  ・HPが0異常なら、アイテムがあるかを辞書検索し、ある且つ値が1だったら
   HPを回復
  ・最後まで移動出来たらYesを出力して終了

 意外とすんなり実装できましたが、WAが4つ発生。
 悩んでいろいろ確認していたら、アイテムを使用した後に値を0にする
 ロジックで、=を書くところが、==になっていて、値が膿和が枯れて
 いませんでした。
 これのせいで30分近くロスしてしまいました・・・・。

 https://atcoder.jp/contests/abc303/submissions/41762897

4.D - Shift vs. CapsLock
 なんとなくDPかとは思いつつ、以下の考えで実装。
 aが連続している場合、capsを押して、shift+aと押さないでaの
 どちらが時間がかからないか・・・
 といった形で、連続したa or Aに応じて
 capsを押すかを判定・・・という実装をしました。

 結果はWAが2個と、意外と惜しい感じではありましたが
 おそらくこのWAをつぶすためにDPを導入しないと
 いけないんだろうなと思います・・・。

 そのうちリベンジするかも。 

以上

0
1
0

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