每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。
输出一个数表示小Q第一天最多能吃多少块巧克力。
3 7
4
n,m = map(int, input().split(" "))
def SumEat(e1,N):
#计算N天一共吃了多少巧克力
S = 0
e = e1
for i in range(0,N):
S += e
e = (e+1)//2
return S
def BinarySearch(N,M):
#二分查找的变异,应用
#创建[1,2,3,...,m]
#以二分查找的方式,判断该位置的元素是不是满足第一天,调用SumEat函数
if N == 1:
return M
low = 1
high = M
while low<high:
mid = (low+high+1)//2
#满足就是mid
if SumEat(mid,N)<=M:
low = mid
else:#不满足的话就用mid前面的元素
high = mid -1
return low
print(BinarySearch(n,m)) n,m = map(int, input().split()) if n == 1: print(m) exit() for i in range(m-n+1,1,-1): t = i s = 0 r = 0 while t!=1: s += t r += 1 t = (t+1)//2 if m-s >= n-r: print(i) break
| 148 ms | 3440K | Python 3 |
import sys
n, m = map(int, sys.stdin.readline().strip().split(' '))
def countchoc(n,l):
count=0
j=l
for _ in range(n):
count += j
j = j//2 +j%2
return count
def solution1(n,m):
if m==n:
return 1
left,right = 1, m-n+1
mid = (left+right)//2
if countchoc(n,right) == m:
return right
while right-left>1:
if countchoc(n,mid) == m:
return mid
elif countchoc(n,mid) > m:
right = mid
mid = (left+right)//2
elif countchoc(n,mid) < m:
left = mid
mid = (left+right)//2
return mid
print(solution1(n,m))