一,题意:

   两个青蛙在赤道上跳跃,走环路。起始位置分别为x,y。
   每次跳跃距离分别为m,n。赤道长度为L。两青蛙跳跃方向与次数相同的情况下,
   问两青蛙是否有方法跳跃到同一点。输出最少跳跃次数。
二,思路:
  本题用到扩展欧几里德算法求二元一次不定式方程(ax+by=c)。
  1,化简方程,然后求解 ax+by = gcd(a,b);
  2,求解 ax+by = c;
  3,求出最小非负整数解x1
三,步骤: 
  1,设青蛙跳了s步。
   则有方程 (x + m*s) - (y + n*s) = l*k  -->  (n - m)*s + l*k = x - y
   令 a = n - m , b = l , x' = s , y' = k , c = x - y ; d = gcd(a,b);
   所以方程化为 a*x' + b*y' = c ;
  2,先利用扩展欧几里德算法求解方程 a*x' + b*y' = gcd(a,b);
  3,利用方程 a*x' + b*y' = gcd(a,b) 的解 x0 以及公式 x = x0*c/d 求出 a*x' + b*y' = c 的解 x1 ; 前提是:d|c  ( c 能被 d 整除 );
  4,利用周期性变化求最小的非负整数解 公式: x1 = ( x1%(b/d) + (b/d) ) % (b/d);
   若方程的a*x' + b*y' = c的一组整数解为(x1,y1),则它的任意整数解为 ( x1 + k* ( b/d ) , y1 - k*( a/d ) )  ( k 取任意整数 ) , T = b/d 就为 x1 增长的周期
    i,若x1为负值,取最大的非正值:x1 = x1 % T ;若x1为正值,以下两步无影响。
    ii,取正, x1 = x1 + T ;

    iii, 防止 i中的x1=0 即 ii中的x1 = T ,那么 x1 = x1 % T ;

 #include<iostream>
using namespace std ; //扩展欧几里德算法 : 用来求解 a*x+b*y=gcd(a,b) 方程x,y可能的值
void exgcd(long long a,long long b,long long& d,long long& x,long long& y){ //int& a 表示传入a的地址
if(!b){d=a;x=;y=;} // d用来存储gcd(a,b)的值
else {exgcd(b,a%b,d,y,x);y-=x*(a/b);}
} int main(){
long long minx,x,y,m,n,l,d,x1,y1,T;
cin>>x>>y>>m>>n>>l;
exgcd(n-m,l,d,x1,y1); //(n-m)*s+l*k = gcd(n-m,l) ==> x1=s y1=k;
if((x-y)%d!=) cout<<"Impossible\n"; //方程有解的条件是:x-y 能被 gcd(n-m,l) 整除
else{
x1=x1*((x-y)/d); //思路2中方程 a*x1 + b*y1 = c 的解 x1 ;
T=l/d; //x的增长周期 T
x1=(x1%T+T)%T;//求出最小非负整数解
cout<<x1<<endl;
}
return ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

poj1061-青蛙的约会(扩展欧几里德算法)的更多相关文章

  1. POJ1061青蛙的约会(扩展欧几里德算法)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 102239   Accepted: 19781 Descript ...

  2. poj1061 青蛙的约会 扩展欧几里德的应用

    这个题解得改一下,开始接触数论,这道题目一开始是看了别人的思路做的,后来我又继续以这种方法去做题,发现很困难,学长告诉我先看书,把各种词的定义看懂了,再好好学习,我做了几道朴素的欧几里德,尽管是小学生 ...

  3. POJ-1061青蛙的约会,扩展欧几里德求逆元!

                                                               青蛙的约会 以前不止一次看过这个题,但都没有去补..好吧,现在慢慢来做. 友情提示 ...

  4. POJ1061——青蛙的约会(扩展欧几里德)

    青蛙的约会 Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...

  5. poj1061青蛙的约会 (扩展欧几里德)

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  6. POJ1061 青蛙的约会 —— 扩展gcd

    题目链接:https://vjudge.net/problem/POJ-1061 青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  7. 解题报告:poj1061 青蛙的约会 - 扩展欧几里得算法

    青蛙的约会 writer:pprp Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 119716 Accepted: 25238 ...

  8. POJ1061-青蛙的约会---扩展欧几里德算法求最小整数解

    扩展欧几里得算法模板 #include <cstdio> #include <cstring> #define ll long long using namespace std ...

  9. BZOJ1477 青蛙的约会 扩展欧几里德

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1477 题意概括 两只青蛙,现在分别在x,y的位置,以m,n的速度在周长为L的环形跑道上面跑. 问他 ...

  10. POJ1061青蛙的约会[扩展欧几里得]

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 108911   Accepted: 21866 Descript ...

随机推荐

  1. 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)

    1. Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字(被Java赋予特殊意义的单词,注意所有关键字都是小写):   goto和const保留了它们,但是 ...

  2. Java解析HTML之HTMLParser使用与详解

    http://blog.csdn.net/jediael_lu/article/details/26285951

  3. http://blog.csdn.net/a491057947/article/details/46724707

    http://blog.csdn.net/a491057947/article/details/46724707

  4. PLSQL Developer 不能连接 oracle 11g 64位 的解决办法

    http://blog.itpub.net/14184018/viewspace-760730 http://www.cnblogs.com/gulvzhe/archive/2012/08/27/26 ...

  5. Mishka and Divisors[CodeForces Round #365 Div.2]

    http://codeforces.com/contest/703/problem/E 题意:给定一个最多个数的序列,从中选出最少个数的数字,使得他们的乘积是k的倍数,若有多种选择方式,输出选出数字和 ...

  6. ssh An internal error occured during "Add Deployment"

    这个问题一般是由于导入别人做的项目,但是项目所用的jdk跟当前所用的jdk不一样. 以前遇到过这个问题没有解决,今天解决了. 右键项目名→Properties→Java Build Path→Libr ...

  7. Storm系统高可用性HA表现

    关于Storm的高可用,有以下几个方面: (1)数据利用阶段可以通过ACK机制保证数据被处理: (2)在进程级别,worker失效,supervisor会自动重启worker线程; (3)在组件级别, ...

  8. 移动端HTML5开发心得(转)

    1. iOS里fixed中有input或者textarea,用户在里面输入文字,触发键盘,fixed容器会居中显示,而不是继续悬浮       解决办法: http://dwz.cn/CrwNz 2. ...

  9. Coder-Strike 2014 - Round 1 A. Poster

    主要就是先将梯子移动到最左边或者最右边 k>n/2时移动到最右边 k<=n/2时移动到最左边 然后遍历一遍 #include <iostream> #include <v ...

  10. URAL 1117. Hierarchy(DP)

    题目链接 这破题,根本看不懂题意啊...题意:一棵中序遍历是1 2 3 4 5...的满二叉树,从a a+1 a+2 a+3 b,总共多少步.x到y的距离为中间有多少个点.a > b没注意2Y. ...