TopCoder SRM 639 Div.2 500 AliceGameEasy

OpenSoucre發表於2014-12-08

題意: 一個遊戲有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;
        }
    }

  

相關文章