12085. Бітова маска


Відправити розв'язок

Бали: 100
Time limit: 2.0s
Memory limit: 500M

Authors:
Problem type
Allowed languages
C++, Java, Pascal, Python

Вам дано ціле число \(N\) і рядок \(S\), що складається з 0, 1 і ?. Нехай \(T\) — множина значень, які можна отримати заміною кожного ? у \(S\) на 0 або 1 та інтерпретувати результат як двійкове ціле число.

Наприклад, якщо \(S= ?0?\), ми маємо \(T=\{000_{(2)} ​ ,001_{(2)} ​ ,100_{(2)} ​ ,101_{(2)} ​ \}=\{0,1,4,5\}\).

Виведіть (як десяткове ціле число) найбільше значення в \(T\), менше або рівне \(N\). Якщо \(T\) не містить значення, менше або рівне \(N\), то виведіть -1.

Обмеження

  • \(S\) — це рядок, що складається з 0, 1 і ?.
  • Довжина \(S\) становить від 1 до 60 включно.
  • \(1≤N≤10^{18}\)
  • \(N\) — ціле число.

Формат вхідних даних

Перший рядок містить \(S\).

Наступний   рядок містить \(N\).

Формат вихідних даних

У вихідний потік виведіть відповідь.

Приклад вхідних даних

?0?
2

Приклад вихідних даних

1

Як показано в постановці задачі, \(T=\{0,1,4,5\}\). Серед них 0 і 1 менші або дорівнюють \(N\), тому ви повинні вивести найбільше з них, 1.

Приклад вхідних даних

101
4

Приклад вихідних даних

-1

Ми маємо \(T=\{5\}\), яке не містить значення, меншого або рівного \(N\).

Приклад вхідних даних

?0?
1000000000000000000

Приклад вихідних даних

5

Коментарі

Ще немає коментарів.