Codeforces 492D Vanya and Computer Game

题目链接: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");
        }
    }
}


你可能感兴趣的:(ACM,codeforces)