Codeforces - 1155C - Alarm Clocks Everywhere

版权声明:文章来自 https://www.lucien.ink,转载请注明文章出处 https://blog.csdn.net/xs18952904/article/details/89474237

地址

https://codeforces.com/contest/1155/problem/C

原文地址

https://www.lucien.ink/archives/419/

题意

你有 nn 个事件,第 ii 个事件需要在第 xix_i 时刻去做,你是一个机器人,你只能选定任意一个起始时间 yy ,然后从给定的 mm 个数字中选出一个 pip_i ,然后你从第 yy 时刻起,每隔 pip_i 个时刻有做事的权利(包括第 yy 个时刻),问能否做完掉所有的事,能的话输出 y i

题解

起始时间肯定是第一个时间发生的时刻,然后对所有事件的间隔求一下 gcdgcd ,判断一下是否存在一个 pip_i 满足 gcdmod   pi=0gcd \mod\ p_i = 0 即可。

代码

https://pasteme.cn/6689

#include <bits/stdc++.h>
typedef long long ll;
const int maxn = int(3e5) + 7;
ll gcd(ll p, ll q) { return q ? gcd(q, p % q) : p; }
int n, m;
ll x[maxn], p[maxn];
int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) scanf("%lld", x + i);
    for (int i = 1; i <= m; i++) scanf("%lld", p + i);
    ll d = 0;
    for (int i = 2; i <= n; i++) d = gcd(d, x[i] - x[i - 1]);
    for (int i = 1; i <= m; i++) {
        if (d % p[i] == 0) {
            return 0 * printf("YES\n%lld %d\n", x[1], i);
        }
    }
    return 0 * puts("NO");
}
展开阅读全文

没有更多推荐了,返回首页