• POJ 1061 青蛙的约会(exgcd)


    嗯...

     

    题目链接:http://poj.org/problem?id=1061

    两只青蛙相遇时肯定满足:x+k*m≡y+k*n(mod L)

                x+k*m-(y+k*n)=L*s

                k*(n-m)-s*L=x-y
     
    即把模线性方程变形后a*x+b*y=c,用exgcd求解,
    先ax+by=gcd(a,b)
    判断c整除g
    然后解就是(x+k*b/g) ,(y-k*a/g)
    注意答案要求非负,所以要进行处理...
     

    AC代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 
     4 using namespace std;
     5 
     6 inline void exgcd(long long a, long long b, long long &g, long long &x, long long &y){
     7     if(!b) { g = a; x = 1; y = 0;}
     8     else { exgcd(b, a % b, g, y, x); y -= x * (a / b);} 
     9 }
    10 
    11 int main(){
    12     long long xx, yy, l, m, n, a, b, c, g, x, y;
    13     scanf("%lld%lld%lld%lld%lld", &xx, &yy, &m, &n, &l);
    14     a = n - m; b = l; c = xx - yy;
    15     exgcd(a, b, g, x, y);//(n-m) * x + l * y = xx - yy 
    16     if(c % g) printf("Impossible
    ");
    17     else{
    18         c /= g; b /= g;
    19         printf("%lld
    ", (x % b * c % b + b) % b);//处理非负 
    20     }
    21     return 0;
    22 }
    AC代码
  • 相关阅读:
    Lightoj 1321 Sending Packets(Bellman-Ford)
    Lightoj 1281 New Traffic System (记忆化Dijkstra)
    NBUT TNT #1 题解报告
    UVA 11624 BFS
    FZU 2150 枚举+BFS
    POJ 3126 BFS
    POJ 3279 DFS
    POJ 1062 dijkstra + 枚举
    lightoj 1123 增量最小生成树
    python 常用算法及解析
  • 原文地址:https://www.cnblogs.com/New-ljx/p/11482405.html
Copyright © 2020-2023  润新知