哈尔滨理工大学-CPC23 2014-2-D-Alice and Bob

来源:互联网 发布:mac版qq群文件 编辑:程序博客网 时间:2024/05/01 15:17

D.Alice and BobTime Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 179 (60 users)Total Accepted: 45 (44 users)Special Judge: NoDescription

Alice和Bob来到一个巨大的操场上进行运动,他们觉得跑步太无聊了,于是决定进行抓人游戏。

Alice和Bob分别站在操场的两个不同位置,两人轮流跑动,且每次都是Alice先跑。除了距离以外,移动不受其他限制。Alice每次最多可以跑a米,而Bob每次最多跑b米。谁在自己移动的过程中抓到对方,则获胜。假设两人采取最优策略,请预测游戏的结果。

Input

输入数据的第一行是测试数据的组数 T(T100)

每组测试数据第一行为四个整数x1,y1,x2,y2(0x1,y1,x2,y2104),分别代表Alice和Bob的初始位置(x1,y1)(x2,y2)

数据的第二行输入ab(0a,b107)

Output如果Alice获胜,输出“Alice”,如果Bob获胜,输出“Bob”,如果没有人可以获胜,输出“Sad”(不包含引号)。Sample Input3
0 0 1 1
2 5
0 0 1 1
1 5
0 0 1 1
1 1Sample Output

Alice
Bob
Sad

本题主要在于存在其中一个的最大距离是另一个的一到二倍最大距离时会出现sad!并且双方并不需要每次均达到最大距离。

A会在一开始来一次判断,之后才会根据双方最大可达到距离以及刚才提到的那个一至二倍规律进行判断胜负与“sad‘。

关键词

①两人轮流跑动,且每次都是Alice先跑。(第一步的判断)

②除了距离以外,移动不受其他限制。(除了初始值,之后的运动方向与双方距离无限制)

③”最多“(代表可以达不到)

④假设两人采取最优策略(出现了一直差那么一点点不敢追到的”sad“!)——关键点在于永远”不敢追到“!


#include<iostream>
#include<cmath>

using namespace std;

int main()
{
    int t;
    int tmp;
    int x1, x2, y1, y2;
    double a, b, sum;
    double len;

    cin >> t;

    while(t -- )
    {
        cin >> x1 >> y1 >> x2 >> y2;
        len = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 -y2));
        cin >> a >> b;
        if(a > len)
        {
            cout << "Alice" << endl;
            continue;
        }
        if(a <= b)
        {
            if(a == b || a * 2 >= b)
            {
                cout << "Sad" << endl;
            }
            else
            {
                cout << "Bob" << endl;
            }
        }
        else
        {
            if(2 * b >= a)
                cout << "Sad" << endl;
            else
            {
                cout << "Alice" << endl;
            }
        }
    }
}

0 0
原创粉丝点击