题解:P17188 [ICPC 2017 Hong Kong R] Sets
Yi_chen123 · · 题解
一道找规律题,赛时没加神秘位数限制 RE 了,吃了
思路
首先我们根据样例不难发现,对于所有的
:::success[证明]{open}
根据题意,
注意到
这里假设
注意
代码注意事项
-
- 写
Python代码时,需要解除整数的长度限制,否则会爆 RE,使用sys.set_int_max_str_digits(0)即可。
代码
import sys
sys.set_int_max_str_digits(0)
data = sys.stdin.read().split()
for i in range(0, len(data), 2):
n, k = int(data[i]), int(data[i + 1])
if n == 1:
print(1 if k == 1 else -1)
elif n == 2:
print(k if k <= 3 else -1)
else:
l, r, tot = 1, n, 0
while tot < k:
tot += r - l + 1
l, r = l * 2 + 1, r * 2 - 1
# print(tot, l, r)
l, r = (l - 1) // 2, (r + 1) // 2
tot -= r - l + 1
pos = k - tot
print(l + pos - 1)