Home >Web Front-end >HTML Tutorial >Codeforces Round #280 (Div. 2)_html/css_WEB-ITnose

Codeforces Round #280 (Div. 2)_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:52:53954browse

This question is surprisingly simple


ABC is almost all sign-in questions


For D,

Convert the shooting time of two people into integers

Find a gcd and divide it.

Assume that the shooting frequency of the two people is 1 second x, 1 second y respectively

x, y’s gcd is g

Converting it is equivalent to

The first person shoots one shot at y/g seconds, and the second person shoots one shot at x/g seconds

Then the two people will shoot at the same time at x/g*y/g seconds

Then each x/g*y/g second is a cycle

Assume the monster’s blood has a, then a% (x y) is the blood volume to be shot in the last cycle

At this time, I am too lazy to continue thinking. Just halve the number of times someone shoots, and that’s it.


#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include <algorithm>#include <map>#define MAXN 55555#define MAXM 222222#define INF 1000000001using namespace std;int n, x, y, a;int main() {    scanf("%d%d%d", &n, &x, &y);    int g = __gcd(x, y);    x /= g;    y /= g;    for(int i = 0; i < n; i++) {        scanf("%d", &a);        a %= (x + y);        if(a == 0 || (a + 1) % (x + y) == 0) puts("Both");        else {            int flag = 0;            int low = 1, high = x;            while(low <= high) {                int mid = (low + high) >> 1;                long long tmp = (long long)mid * (long long)y;                long long z = tmp / (long long)x;                if(z + mid > a) {                    high = mid - 1;                } else if(z + mid == a) {                    flag = 1;                    break;                } else {                    low = mid + 1;                }            }            if(flag) {                puts("Vanya");            } else {                puts("Vova");            }        }    }    return 0;}



If E

the question gives a good limit

that is, from the x direction or the y direction, you start from Start walking at 0 and walk n steps. You will definitely be able to traverse all 0~n-1

. Then you simulate walking n steps from 0 in the x direction and get an x ​​coordinate sequence

y Coordinates do the same thing

two sequences. They are all cyclic

Then you choose to start from a certain point (x0, y0)

It is nothing more than two sequences, the x sequence starts from x0, and the y sequence starts from y0, Each took n steps to see which points met the requirements of the question

Looking again, I found that it was nothing more than looking at the relative positions of the two sequences.

For all given points, calculate the relative positions of the two corresponding sequences, and finally count


#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include <algorithm>#include <map>#define MAXN 55555#define MAXM 222222#define INF 1000000001using namespace std;int posx[1111111], posy[1111111];int n, m, dx, dy;int x[111111], y[111111];int num[1111111];int main() {    scanf("%d%d%d%d", &n, &m, &dx, &dy);    int now = 0;    int ind = 0;    while(posx[now] == 0) {        posx[now] = ++ind;        now = (now + dx) % n;    }    now = 0, ind = 0;    while(posy[now] == 0) {        posy[now] = ++ind;        now = (now + dy) % n;    }    int mx = 0, p = 0;    for(int i = 0; i < m; i++) {        scanf("%d%d", &x[i], &y[i]);        int px = posx[x[i]];        int py = posy[y[i]];        int t = (py - px + n) % n;        num[t]++;        if(num[t] > mx) {            mx = num[t];            p = t;        }    }    for(int i = 0; i < m; i++) {        int px = posx[x[i]];        int py = posy[y[i]];        int t = (py - px + n) % n;        if(t == p) {            printf("%d %d\n", x[i], y[i]);            break;        }    }    return 0;}



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn