zoukankan      html  css  js  c++  java
  • Poj 1061 青蛙的约会(扩展GCD)

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

    解题报告:两只青蛙在地球的同一条纬度线上,选取一个点位坐标轴原点,所以现在他们都在同一个首尾相连的坐标轴上,那么他们现在的位置分别是x和y,他们每次跳的时间是一样的,跳的距离分别是m,n,现在他们像同一个方向开始跳,要你求出最少跳多少步会出现在同一个位置。

    扩展GCD,k * m + x - (k * n + y) = c * l;       //跳了k步之后相遇,这时候到原点的距离之差会是周长的整数倍

    变形之后得:

    k * (m - n) + (-c) * l = y -x

    现在先求k * (m-n) + (-c) * l = GCD(m-n,l)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<deque>
     6 #include<set>
     7 using namespace std;
     8 typedef long long INT;
     9 INT extgcd(INT a, INT b, INT & x, INT & y)
    10 {
    11     if (b == 0) { x=1; y=0; return a; }
    12     INT d = extgcd(b, a % b, x, y);
    13     INT t = x; x = y; y = t - a / b * y;
    14     return d;
    15 }
    16 int main()
    17 {
    18     INT x,y,m,n,l;
    19     scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
    20     INT k1,k2;
    21     INT d = extgcd(n-m,l,k1,k2);
    22     if((x - y) % d != 0) puts("Impossible
    ");
    23     else
    24     {
    25         k1 *= ((x - y) / d);
    26         INT r = l / d;
    27         k1 = (k1 %  r + r) % r;
    28         printf("%lld
    ",k1);
    29     }
    30     return 0;
    View Code
  • 相关阅读:
    PopupWindow设置动画效果
    android判断是否含有某权限
    每日一更提醒
    利用Pattern和Mather来禁止特殊字符的输入
    Android毛玻璃处理代码(Blur)
    how to render html tag
    数组
    复杂度分析
    书写markdown的利器
    cannot insert multiple commands into a prepared statement问题原因及解决办法
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3877713.html
Copyright © 2011-2022 走看看