1
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.はじめに
 GW期間を経て久々のコンテスト。ゼルダをしてたらいつの間にか開始時間に
 なっていて慌ててスタート。D問題に苦戦していて時間ギリギリまで
 粘っていたら、会社から電話があってトラブル対応に・・・。
 バタバタしているうちに終わり3問正解で終了。
 レートは微増で終わりました。

1.A - Overall Winner
 TとAの数が同じ場合の解決法として、最後の勝利者でない方を
 総合勝者とすることで実装しました。

 https://atcoder.jp/contests/abc301/submissions/41352697

2.B - Fill the Gaps
 リストを先頭から見ていき、前の数字との差が2以上空いていたら
 間を埋める数字を入れていくという形で実装しました。

 https://atcoder.jp/contests/abc301/submissions/41358622

3.C - AtCoder Cards
 考え方としては、いかさまをすればカードの並び順は関係ないので
 単純にSとT内でアルファベット毎に出現数を比較し
  ・出現数に差異がある文字がa, t, c, o, d, e, r以外ならNo
  ・上記以外の差異数=置き換えなければいけない文字数が@の数より多ければNo
  ・上記以外ならYes
 といった考えで実装しAC。

 https://atcoder.jp/contests/abc301/submissions/41372054

4.D - Bitmask
 コンテスト中はSとNをそれぞれ二進法で管理して
 桁をそろえ頭から比較していきNよりSを小さくするように
 調整していくと言った感じで実装をしていきました。
 結局、考慮の穴等も多く穴埋めてる間に時間が無くなってしまいました。

 コンテスト後に解説を見て根本のとこで勘違い(なぜか文字列Sを後ろから
 切り取ってよいと思っていました・・・)していたので
 素直に解説通りに実装しました。

 実装
  1)文字列Sを数値SNに変換。その際"?"は”0”とし、とりうる最小値を
  求める。(解説を見てreversedという書き方を知りました。)

for i in reversed(range(SL)):
    if(S[SL-i-1]=="1"):
        SN+=1<<i

  2)SNがNより大きかったら-1を表示
  3)上記以外の時はSを先頭から見ていき
   ?を1に変えた場合のSNがNを超えなければ
   変えていく。

    for i in reversed(range(SL)):
        if(S[SL-i-1]=="?"):
            if(SN+(1<<i)<=N):
                SN+=1<<i

  4)3)の結果を表示して終了

 https://atcoder.jp/contests/abc301/submissions/41402835

以上

1
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
1
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?