• 1390 游戏得分(贪心)


    题目来源: TopCoder
    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
    A与B两人玩一个游戏,这个游戏有若干个回合(可能0回合)。游戏的回合依次标号为1,2,3,4...。你不需要关心游戏的内容,现在只要知道第i回合胜者会获得2*i-1分,每回合游戏不存在平局。现在已知A和B在游戏结束时各获得了x分与y分的总分。问A在这个游戏中至少获胜了几盘?如果给出的x与y一定不会出现那么输出-1.
    Input
    多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
    每组测试数据有相同的结构构成:
    每组数据一行包含两个整数x,y,表示A与B最后的总得分,其中0<=x,y<=1,000,000,000,000。
    Output
    每组数据一行输出,即A最少获胜了几盘,非法的x与y对输出-1。
    Input示例
    3
    8 17
    17 8
    0 0
    Output示例
    2
    3
    0



    //左思右想没想到什么好办法,最后,看了别人的,似乎贪心就行,先赢了分数大的,然后判断下奇偶即可。。。似乎就是最好的方法
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define INF 0x3f3f3f3f
     4 #define LL long long
     5 #define MX 505
     6 
     7 LL x, y;
     8 LL getall(LL all)
     9 {
    10     LL l=0, r=1e9;
    11     while (l<=r)
    12     {
    13         LL mid = (l+r)>>1;
    14         if (mid*mid==all)
    15             return mid;
    16         else if (mid*mid>all)
    17             r=mid-1;
    18         else
    19             l=mid+1;
    20     }
    21     return -1;
    22 }
    23 
    24 int main()
    25 {
    26     int T;
    27     scanf("%d",&T);
    28     while(T--)
    29     {
    30         scanf("%lld%lld",&x,&y);
    31         LL all = getall(x+y);
    32         if (all==-1||x==2||y==2)
    33             printf("-1
    ");
    34         else
    35         {
    36             if (x==0)
    37                 printf("0
    ");
    38             else if (y==0)
    39                 printf("%lld
    ",all);
    40             else
    41             {
    42                 LL ans = 0;
    43                 for (LL i = all;i>=1;i--)
    44                 {
    45                     if (x>i*2-1)
    46                     {
    47                         ans++;
    48                         x-=i*2-1;
    49                     }
    50                     else
    51                     {
    52                         if (x%2) ans++;
    53                         else ans+=2;
    54                         break;
    55                     }
    56                 }
    57                 printf("%lld
    ",ans);
    58             }
    59         }
    60     }
    61     return 0;
    62 }
    View Code


  • 相关阅读:
    Chevy equinox
    回家线路
    salesforce account hierarchy
    IOS8 对flex兼容性问题
    Chrome FeHelper 插件下载地址
    vue 项目抛出警告
    vue 干货
    Error in mounted hook: "TypeError: handlers[i].call is not a function" 原因
    vue 路由知识点(一级路由与二级路由嵌套)
    (转)ORA-01940: cannot drop a user that is currently connected 问题解析
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/7623820.html
Copyright © 2020-2023  润新知