码迷,mamicode.com
首页 > 其他好文 > 详细

TopCoder SRM 639 Div.2 500 AliceGameEasy

时间:2014-12-08 22:49:01      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:blog   sp   for   on   div   log   bs   ad   as   

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

标签:blog   sp   for   on   div   log   bs   ad   as   

原文地址:http://www.cnblogs.com/xiongqiangcs/p/4151988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!