传送门:cf 492D
两只中二属性的"勇者",攻击频率分别为x,y,有n只怪物,两个人同时开始攻击,问谁能拿下 last attack 如果两者同时攻击时怪物死亡,则算他们同时拿下。问给定的n只怪物分别由谁拿下 last attack。
打表找规律,打出血量从1~x+y的时候分别由谁拿下的最后一击,然后取模输出就好
/******************************************************
* File Name: d.cpp
* Author: kojimai
* Create Time: 2014年12月02日 星期二 01时07分05秒
******************************************************/
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
const int FFF = 2000005;
int judge[FFF];
void init(long long a,long long b)
{
long long i = 1,j = 1,cnt = 1;
judge[0] = 0;
while(i < a || j < b)
{
//cout<<"i = "<<i<<" b = "<<b<<" j = "<<j<<" a = "<<a<<endl;
//cout<<' '<<i*b<<" "<<j*a<<endl;
if(i * b < j * a)
{
i++;
judge[cnt++] = 1;
}
else if(i * b > j * a)
{
j++;
judge[cnt++] = 2;
}
else
{
i++;j++;
judge[cnt++] = 0;
judge[cnt++] = 0;
}
}
}
void print(int x)
{
switch(x)
{
case 1:printf("Vanya\n");break;
case 2:printf("Vova\n");break;
case 0:printf("Both\n");break;
}
}
int main()
{
//int n,a,b,sum;
//scanf("%d%d%d",&n,&a,&b);
long long n,a,b,sum;
cin>>n>>a>>b;
sum = a+b;
init(a,b);
int x;
for(int i = 0;i < n;i++)
{
scanf("%d",&x);
x %= sum;
print(judge[x]);
}
return 0;
}
w = []
n,x,y = map(int,raw_input().split())
def solve(x,y):
w.append(0)
i = 1
j = 1
while i <= x or j <= y :
if i * y == j * x:
w.append(0)
w.append(0)
i = i + 1
j = j + 1
elif i * y > j * x:
w.append(2)
j = j + 1
else:
w.append(1)
i = i + 1
solve(x,y)
for i in range(0,n):
a = int(raw_input())
a = a % (x + y)
if w[a] == 0:
print 'Both'
elif w[a] == 1:
print 'Vanya'
else:
print 'Vova'