D. Ice Cream Balls

孤鹜长天-發表於2024-08-20

題目連結: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))