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\n");
        else if(e[h].who==1) printf("Vanya\n");
        else printf("Vova\n");
    }
}
复制代码

 

posted @   TRTTG  阅读(56)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2020-10-04 天梯赛 球队“食物链”
2020-10-04 天梯赛 周游世界
点击右上角即可分享
微信分享提示