首页 > 其他 > 详细

59: loj #10215

时间:2018-11-05 18:33:58      阅读:137      评论:0      收藏:0      [点我收藏+]

$des$

https://loj.ac/problem/10215

$sol$

技术分享图片

exgcd检查

$code$

#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cstdio>

using namespace std;

#define gc getchar()
inline int read() {
    int x = 0; char c = gc;
    while(c < 0 || c > 9) c = gc;
    while(c >= 0 && c <= 9) x = x * 10 + c - 0, c = gc;
    return x;
}

#define LL long long

const int N = 20;

LL C[N], P[N], L[N];
int n;
int M = 1e6;

LL Exgcd(LL a, LL b, LL &x, LL &y) {
    if(b == 0) {
        x = 1, y = 0; return a;
    }
    LL gg = Exgcd(b, a % b, x, y);
    LL tmp = x;
    x = y, y = tmp - a / b * y;
    return gg;
}

bool Solve(LL k) {
    for(int i = 1; i <= n; i ++) {
        for(int j = i + 1; j <= n; j ++) {
            LL c1 = C[i], c2 = C[j], p1 = P[i], p2 = P[j], x, y;
            LL b = p1 - p2, d = c2 - c1;
            if(b < 0) b = -b, d = -d;
            LL g = Exgcd(b, k, x, y);
            if(d % g) continue;
            x *= (d / g);
            LL r = k / g;
            while(x < 0) x += r;
            x %= r;
            if(x <= min(L[i], L[j])) return 0;
        }
    }
    return 1;
}

int main() {
    n = read();
    LL Max = 0;
    for(int i = 1; i <= n; i ++)
        C[i] = read(), P[i] = read(), L[i] = read(), Max = max(Max, C[i]);
    int a;
    for(a = Max; a <= M; a ++) {
        if(Solve(1ll * a)) {
            cout << a; return 0;
        }
    }
    
    return 0;
}

 

59: loj #10215

原文:https://www.cnblogs.com/shandongs1/p/9910559.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!