codeforces 492D Vanya and Computer Game 数论

来源:互联网 发布:反监控软件 编辑:程序博客网 时间:2024/05/28 09:31

传送门: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 + 1solve(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'


0 0