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.はじめに
 昨日のARCでレートが699と700まであと1に迫ったので
 気合を入れて臨みました。
 結果としてはCまでしか正解できず、レートダウンとなりました・・・。
 ただ、今回のD問題は予選と違っていつものレベルだった気がします。

1.A - camel Case
 文字列ないから大文字を探す問題。
 文字コードとかはややこしいので
 前に使った大文字一覧を検索して
 大文字だったら出力でACとなりました。

 https://atcoder.jp/contests/abc291/submissions/39228337

2.B - Trimmed Mean
 リストから指定した範囲を抜き出す問題のアレンジ版。
 いろいろやり方はありそうでしたが、要素数も少ない制約だったので
  -もらったリストをソートしたのち、回答用リストLに移していく
   -ただし、先頭N個(添え字がNより小さい場合)と
    末尾N個(添え字が4*Nより大きい場合)はうつさない
  -Lの合計をLの個数で割って平均を求め表示
 と、素直に組んでACとなりました。

 https://atcoder.jp/contests/abc291/submissions/39237397

3.C - LRUD Instructions 2
 座標移動問題。
 最初、途中で原点に戻るかどうかの問題と勘違いしてWAを食らいました。
 (例題含め、ミスリードしている気がしないでもない。)
 その後移動後の座標位置を辞書に登録する形で実装し
 移動後に前に訪れた場所かを判定し訪れていればYesを表示して
 exitする実装でACを頂けました。
 もったいなかったのは、提出時にテスト用のdictを出力する
 バージョンを提出してWAを食らったことでした・・。5分ロス。

 https://atcoder.jp/contests/abc291/submissions/39246854

4.D - Flip Cards
 一時間以上時間が残ってましたが正解にたどり着けませんでした。
 考え方の方向性はあっていた・・・ようないないような・・・。

 【考え方(誤)】
  ・まず先頭のカードは裏表どちらでもよいので
   パターン数(ans)に2をセット
  ・その後、1枚ずつパターン分けして考える。
   前表:後表、前表:後裏、前裏:後表、前裏:後裏
   をそれぞれ比較し、Nans(初期値0)に同じなら+1、違うなら+0する
   -i番目のカードが、表でも裏でもi-1番目のカードと
    同じ数字にならない(Nans=0)時は、ansに2をかける。
   -表も裏も同じ数字かつ、1枚前のカードも表も裏も
    同じ数字の場合(Nans=4)は、ansに0をかけて出力してexit。

  といったところまでは、思いついたのですが、
  Nans=1~3の時どうすればいいの??となって時間切れ。

 解説を見ると、DPとなってはいましたが、上の考え方の
 ansをXとY(前のカードが表のパターンと裏のパターン) に分けて
 考えればよいと理解しました。

 【考え方(正)】
  1)リストXにカードの1枚目から表の数字を格納
  2)リストYにカードの1枚目から裏の数字を格納
  3)前のカードが表の場合の変数ansXと裏の場合の変数ansYを用意し
   1枚目のケース分ansX=1、ans=1で初期化。
   (Nが1の場合は、答えはansX+ansYで2となる。)
  4)以下、添え字iを1~Nまで繰り返す。
   4-1)添え字iのカードが表の場合のケース数をセットする変数NansXと
     添え字iのカードが裏の場合のケース数をセットする変数NansYを用意
   4-2)前のカード(i-1枚目)の表裏と今のカード(i枚目)の表裏を比較
    4-2-1)前表(X[i-1]):後表(X[i])が違うとき
        NansXにansXを加算
    4-2-2)前裏(Y[i-1]):後表(X[i])が違うとき
        NansXにansYを加算
    4-2-3)前表(X[i-1]):後裏(Y[i])が違うとき
        NansYにansXを加算
    4-2-4)前裏(Y[i-1]):後裏(Y[i])が違うとき
        NansYにansYを加算
   4-3)ansXにNansXをセット
   4-4)ansYにNansYをセット
  5)ansX+ansYのmodを出力
 
  前のカードが表だった場合、今のカードが表裏どちらでもよい場合は、
  今のパターンが表&前のカードが表のパターン数+今のパターンが裏&前のカードが表のパターン数
  なので結果的に2倍、
  前のカードが表だった場合で、今のカードが表しかだめな場合は、
  今のパターンが表&前のカードが表のパターン数なので、結果的にパターン数は増えない。
  と、うまく説明できているかはわかりませんが、私の中では納得いきました。

 https://atcoder.jp/contests/abc291/submissions/39280542

以上

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?