每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,表示父母出差的天数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))