码迷,mamicode.com
首页 > 其他好文 > 详细

59: loj #10215

时间:2018-11-05 19:06:29      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:string   etc   bsp   技术   分享   col   .com   分享图片   lib   

$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

标签:string   etc   bsp   技术   分享   col   .com   分享图片   lib   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!