atcoder#ABC301D. [ABC301D] Bitmask

[ABC301D] Bitmask

题目描述

0, 1, ? からなる文字列 S S および整数 N N が与えられます。 S S に含まれる ? をそれぞれ 0 または 1 に置き換えて 2 2 進整数とみなしたときに得られる値の集合を T T とします。 たとえば、S= S= ?0? のとき、 $ T=\lbrace\ 000_{(2)},001_{(2)},100_{(2)},101_{(2)}\rbrace=\lbrace\ 0,1,4,5\rbrace $ です。

T T に含まれる N N 以下の値のうち最大のものを (10 10 進整数として) 出力してください。 N N 以下の値が T T に含まれない場合は、代わりに -1 を出力してください。

输入格式

入力は以下の形式で標準入力から与えられる。

S S N N

输出格式

答えを出力せよ。

题目大意

题意简述

给定整数 N(1N1018)N(1\le N\le 10^{18}) 和只包含字符 01? 的字符串 S(1S60)S(1\le |S|\le 60)

SS 视为一个二进制数,令 TT 为将 SS 中的 ? 替换为 01 后所能得到的数字集合。请求出 TT 中小于等于 NN 的最大数字,并以十进制方式输出。

如果 TT 中不包含小于等于 NN 的数字,输出 -1

Translate by

/user/752485

?0?
2
1
101
4
-1
?0?
1000000000000000000
5

提示

制約

  • S S 0, 1, ? からなる文字列
  • S S の長さは 1 1 以上 60 60 以下
  • 1 N  1018 1\leq\ N\ \leq\ 10^{18}
  • N N は整数

Sample Explanation 1

問題文中で例示したとおり、T={ 0,1,4,5} T=\lbrace\ 0,1,4,5\rbrace です。 T T に含まれる N N 以下の値は 0 0 1 1 なので、そのうちの最大である 1 1 を出力します。

Sample Explanation 2

T={ 5} T=\lbrace\ 5\rbrace であるため、N N 以下の値は T T に含まれません。