游客 Signup | Login
中文 | En

2178 - 射击游戏

Oppsitre和vera在无限长的一维坐标系上玩射击游戏。游戏开始时,Oppsitre的位置在坐标原点0,vera的位置在d。Oppsitre的最大移动距离和最大攻击距离分别为mov1 rng1,vera的最大移动距离和最大攻击距离分别为mov2 rng2。从Oppsitre开始,两人轮流在坐标轴上自由移动(每次移动距离都不超过自身最大移动距离,且允许两人在同一坐标上)。当在某方行动的那一轮之内,对方在自己的攻击范围内,则视为现行动方获胜。
现给出mov1,mov2,rng1,rng2,d,试问双方是否有必胜策略。若双方均无必胜策略,则视为平局。

<br />

Input

输入包含多组测试数据。
每行五个整数,分别代表 mov1,mov2,rng1,rng2,d (每个整数的取值范围均为[1, 100,000,000])

<br />

Output

每个输入样例输出一行。
若Oppsitre有必胜策略,输出“Oppsitre”(不包括引号)
vera有必胜策略,输出“vera”(不包括引号)
若双方均无必胜策略,输出“Draw”(不包括引号)

<br />

Examples

Input

1 58 1 58 2
2 1 1 100 50
2 1 1 100 150

Output

Oppsitre
vera
Draw

Solution C++

#include <string>
#include <iostream>
using namespace std;
class FoxAndFencing {
public:
  string WhoCanWin(int, int, int, int, int);
};

string FoxAndFencing::WhoCanWin(int mov1, int mov2, int rng1, int rng2, int d) {
  string w1 = "Oppsitre", w2 = "vare", draw = "Draw";
  if (mov1 + rng1 >= d)
    return w1;
  if (mov2 + rng2 >= d + mov1)
    return w2;
  if (mov1 == mov2)
    return draw;
  if (mov1 > mov2) {
    if (mov1 + rng1 > 2 * mov2 + rng2) {
      return w1;
    }
    return draw;
  } else {
    if (mov2 + rng2 > 2 * mov1 + rng1) {
      return w2;
    }
    return draw;
  }
}

int main() {
	//freopen("Problem6.in", "r", stdin);
	//freopen("Problem6.out", "w", stdout);
  int a, b, c, d, e;
  FoxAndFencing x;
  while (cin >> a >> b >> c >> d >> e) {
    cout << x.WhoCanWin(a, b, c, d, e) << endl;
  }
  return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题