题目链接:http://codeforces.com/problemset/problem/492/D
题意:游戏里,有2个玩家,a玩家1s内攻击x次,b玩家1s内攻击y次,给出若干个怪物的血量,问谁补得刀
思路:a玩家第i次攻击,b玩家第j次攻击,i/x > j/y(化简为i*y >j*x),i+j次是b的,若相等则i+j次攻击和i+j+1次攻击都视为同时攻击
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 2000300
#define LL long long
using namespace std;
int at[maxn];
int main()
{
int n,x,y;
while (scanf("%d%d%d",&n,&x,&y)!=EOF)
{
LL cnt=1,xx=1,yy=1;
memset(at,0,sizeof(at));
while (cnt<=x+y)
{
if (xx*y>yy*x)
{
at[cnt++]=2;
yy++;
}
else if (xx*y<yy*x)
{
at[cnt++]=1;
xx++;
}
else
{
at[cnt++]=3;
at[cnt++]=3;
xx++;
yy++;
}
}
at[0]=at[cnt-1];
LL hp;
for (int i=0;i<n;i++)
{
scanf("%I64d",&hp);
hp=hp%(x+y);
if (at[hp]==3) printf("Both\n");
else if (at[hp]==1) printf("Vanya\n");
else printf("Vova\n");
}
}
}