您的位置:首页 > 其它

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

2014-08-30 15:41 375 查看

D.Alice and Bob
Time Limit: 1000 MSMemory Limit: 65536 K
Total Submit: 179 (60 users)Total Accepted: 45 (44 users)Special Judge: No
Description
Alice和Bob来到一个巨大的操场上进行运动,他们觉得跑步太无聊了,于是决定进行抓人游戏。

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

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

数据的第二行输入a和b(0≤a,b≤107)。
Output
如果Alice获胜,输出“Alice”,如果Bob获胜,输出“Bob”,如果没有人可以获胜,输出“Sad”(不包含引号)。
Sample Input
3

0 0 1 1

2 5

0 0 1 1

1 5

0 0 1 1

1 1
Sample 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;

}

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: