• 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;
            }
        }
    

      

  • 相关阅读:
    Decompiling XAPK Files
    ps4双手柄inputManager设置
    游客须知
    页面类
    Temp
    Web AppDomain
    委托和事件
    动态执行js
    遍历对象属性,成员,方法的方法
    用Windows操作系统的人有时会遇到这样的错误信息:
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/4151988.html
Copyright © 2020-2023  润新知