zoukankan      html  css  js  c++  java
  • CF492 D. Vanya and Computer Game

    Problem - 492D - Codeforces

    题意:

    有n只怪兽,第i只怪兽被打ai次之后才会死

    有2个人分别以1秒种攻击x、y次攻击所有怪兽

    问第i只怪兽最后死在谁的手里

    两个人分别每1/x、1/y秒攻击一次,即1/gcd(x,y)是一个周期

    在这个周期里,两个人分别攻击x/gcd、y/gcd次

    第i次攻击的时间分别是i/x,i/y

    把一个周期里的所有攻击时间从小到大排序

    然后根据怪兽血量判断出是被周期内第几次恰好打死

    就知道是死在谁手里了

    时间是小数可能有精度误差,所以把所有的时间乘上lcm(x,y)转换为整数再比较

    #include<bits/stdc++.h>
     
    using namespace std;
     
    #define N 100002
     
    int a[N];
    struct node
    {
        long long tim;
        int who;
    }e[N*20]; 
     
    bool cmp(node p,node q)
    {
        return p.tim<q.tim;
    }
     
    int main()
    {
        int n,x,y;
        scanf("%d%d%d",&n,&x,&y);
        for(int i=1;i<=n;++i) scanf("%d",&a[i]);
        int gcd=__gcd(x,y);
        long long lcm=1ll*x*y/gcd;
        int sx=x/gcd,sy=y/gcd;
        long long tx=lcm/x,ty=lcm/y;
        int m=0;
        for(int i=1;i<=sx;++i) 
        {
            e[++m].tim=tx*i;
            e[m].who=1;
        }
        for(int i=1;i<=sy;++i) 
        {
            e[++m].tim=ty*i;
            e[m].who=2;
        }
        sort(e+1,e+m+1,cmp);
        int h=0;
        for(int i=1;i<=n;++i)
        {
            h=a[i]%m;
            if(!h || h==m-1) printf("Both
    ");
            else if(e[h].who==1) printf("Vanya
    ");
            else printf("Vova
    ");
        }
    }
    作者:xxy
    本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。
  • 相关阅读:
    Speech_recognition
    Unity3D
    Kinect
    matlab
    debian install
    menu.lst
    RStudio
    System.BadImageFormatException
    C语言期末复习划重点啦!赶上复习的末班车,祝你期末考试不挂科!
    程序员的中年危机:不是物质的匮乏,而是身份的焦虑
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/15366998.html
Copyright © 2011-2022 走看看