題意: 一個遊戲有n輪,有A和B比賽,誰在第 i 輪得勝,就獲得 i 分,給出x,y,問A得x分,B得y分有沒有可能,如果有,輸出A最少贏的盤數
解題思路:
首先判斷n(n+1)/2 = (x+y)是否有解,即是否存在n為整數,使得所有分數的和加起來為x+y,即判斷n2+n-2(x+y)=0,存在整數解,
根據二次方程的根為(-1±Δ)/2 為整數,其中Δ=√(1+8(x+y)) , 即判斷1+8(x+y)是否能開方以及Δ是否為奇數(如果Δ為偶數,則根不是整數)
如果前面條件滿足,在通過貪心,從n開始累加使的其值大於x位置,此時個數即為A最少贏的盤數,如果x<n ,則只要在分數為x的時候贏即可,即x
long long findMinimumValue(long long x, long long y) { long long score = 1 + 8*(x+y); long long tmp = sqrt(score); if(tmp*tmp != score || tmp%2 == 0) return -1; else{ long long n = (tmp-1)/2, res = 0; if(x <= n) return res; for(int i = n; x > 0; -- i ){x-=i;res++;} return res; } }