首页 > 代码库 > TopCoder SRM 639 Div.2 500 AliceGameEasy

TopCoder SRM 639 Div.2 500 AliceGameEasy

题意: 一个游戏有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;        }    }

  

TopCoder SRM 639 Div.2 500 AliceGameEasy