Codeforces 492D Vanya and Computer Game 循环节找规律

题目链接:点击打开链接

题意:

给定n只怪物的血量,x‘, y

第一个人每秒钟攻击x次,第二个人每秒钟攻击y次

每次攻击给所有存活的怪物造成一点伤害。

问每只怪物最后一击是谁打死的

思路:xy的最小公倍数内有个循环节,先跑出这个循环节(同时攻击时造成2点伤害,就在循环节里加2次both)

然后对于每只怪只要关心在循环节里坐落在哪个攻击点就好了

#include<bits/stdc++.h>
using namespace std;

const int maxn=2000010;
int v[maxn];

int main()
{
    long long n,x,y;
    cin>>n>>x>>y;
    int sum=0;
    for(int i=1,j=1;i<=y&&j<=x;)
    {
        if(i*x<j*y) {v[++sum]=2;i++;continue;}
        if(i*x>j*y) {v[++sum]=1;j++;continue;}
        if(i*x==j*y) {v[++sum]=0;v[++sum]=0;i++;j++;continue;}
    }
    long long m=x*y;
    for(int i=0;i<n;i++)
    {
        long long a;
        cin>>a;
        a=a%sum;
        if(v[a]==1) {cout<<"Vanya"<<endl;continue;}
        if(v[a]==2) {cout<<"Vova"<<endl;continue;}
        if(v[a]==0) {cout<<"Both"<<endl;continue;}
    }
    return 0;
}
时间: 2024-11-08 20:10:17

Codeforces 492D Vanya and Computer Game 循环节找规律的相关文章

codeforces 492D Vanya and Computer Game(额。。。数学题?水题吧)

传送门:点击打开链接 题目大意: 有2个人在打怪,攻击频率分别是x,y.小怪有num点血.问死的时候是谁打死的.如果同时出手 输出Both. 解题思路: 在一秒内考虑这个问题(一秒是循环节). 假设攻击时刻的分母x*y.那么容易得到每个人的攻击时刻(在一秒内). 然后如果有一个时刻有重复.那么肯定是2个人同时在打. 排个序就好了. 这是D题么...我觉得最多是C题难度,吐槽一下... #include <cstdio> #include <vector> #include <

hdu4696 Answers(循环节+找规律)

题意: 分析: 容易想到先把T数组按位置和对应权值建一个有向图(类似置换群那种指法) 然后图建完了,如果C[]里面都是2,那显然只能凑出那些偶数,奇数是不能凑出来的 如果C[]有1有2呢? 事实上是可以凑出所有自然数的…… 找一个含有数字1的棒棒糖图形(先一条链,后一个环) 1)如果环中全是2,没有1  从起点一直走下去一定是这样一个情况.......12222222222.....  我们发现可以根据12222222.....来凑出所有数 2)如果环中有1,那么我们可以用数学归纳法来证明,假设

1005:取余,循环,找规律

Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.Given A, B, and n, you are to calculate the value of f(n). Input The input consists of multiple test cases. Each test case cont

数论基础——循环节和矩阵快速幂的运用

首先我们来看一道基础题: 题目链接:HDU1005 Number Sequence 题目描述: Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 147421    Accepted Submission(s): 35814 Problem Description A number sequence is

循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位. 下面的方法,可以求出循环节的长度. 请仔细阅读代码,并填写划线部分缺少的代码. public static int f(int n, int m) { n = n % m;   Vector v = new Vector(); for(;;) { v.add(n); n *= 10; n = n % m; if(n==0) ret

codeforces 492E. Vanya and Field(exgcd求逆元)

题目链接:codeforces 492e vanya and field 留个扩展gcd求逆元的板子. 设i,j为每颗苹果树的位置,因为gcd(n,dx) = 1,gcd(n,dy) = 1,所以当走了n步后,x从0~n-1,y从0~n-1都访问过,但x,y不相同. 所以,x肯定要经过0点,所以我只需要求y点就可以了. i,j为每颗苹果树的位置,设在经过了a步后,i到达了0,j到达了M. 则有 1----------------------(i + b * dx) % n = 0 2------

hud5451_求循环节加矩阵快速幂

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5451 题目描述: 对于,给出x和mod,求y向下取整后取余mod的值为多少? 找循环节解析链接:http://blog.csdn.net/ACdreamers/article/details/25616461 裸题链接:http://blog.csdn.net/chenzhenyu123456/article/details/48529039 1 #include <algorithm> 2 #i

poj 1961 Period【求前缀的长度,以及其中最小循环节的循环次数】

Period Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 14653   Accepted: 6965 Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the

CodeForces 52C Circular RMQ(区间循环线段树,区间更新,区间求和)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://codeforces.com/problemset/problem/52/C You are given circular array a0,?a1,?...,?an?-?1. There are two types of operations with it: inc(lf,?rg,?v) - this operation increases each element on the segm