D. Ice Cream Balls
题目链接:https://codeforces.com/contest/1862/problem/D
题目:
思路讲解:首先观察样例和题目不难看出,x个不重复的数字一共能组成x(x-1)/2个数组,而当有重复的数字出现的时候,就只能多组成一个数组,那思路就很明确了,先找出最多能有几个不重复的数字,之后再加上需要完成的数组和已有的数组的差值就可以了。当然这个过程,我们最简单的就是通过枚举的方法找到不重复的数字个数,但系,样子的话太浪费时间,所以我们可以用二分的方法来节约时间,这样就不用担心超时的问题了。
代码:
def fun(x):##二分函数
r=x
l=0
while l<=r:
mid=(l+r)//2
sum=(mid-1)*mid//2
if sum==x:
break
if sum<x:
l=mid+1
else:
r=mid-1
return mid,sum
n=int(input())##主函数
for i in range(n):
a=int(input())
x,y=fun(a)
if y>a:
x-=1
y-=x
print(x+(a-y))