POJ 1061 青蛙的约会
来源:互联网 发布:java 格式化数字 编辑:程序博客网 时间:2024/06/11 17:47
Poj 1061 青蛙的约会
算法解析:使用扩展欧几里得算法,算是经典的欧几里得原理的应用编程题
辗转相除法(欧几里得算法):gcd(a,b)=gcd(b, a mod b)
扩展欧几里得算法,实际用于求q,p a*p+b*q=gcd(a,b)
求法参照二元一次不定方程解法
算法代码注意事项:由于编译会使得a%b(a<0,b>0)=r<0,若需要使r计算结果为正,r=(a%b+b)%b,这样r必然为正,(注意此题b必然大于0所以不必考虑a%b b<0情况,VS2008编译器似乎是根据a的正负来判断余数r的结果)
算法代码:写的比较潦草...
#include<iostream>#include<cmath>using namespace std;//#include <fstream>//求最大公约数,a,b均大于0long long GetGcd(long long a, long long b){long long r=a%b;while (r){a=b;b=r;r=a%b;}return b;}long long k1,k2;void Calculate(long long a, long long b){long long tmp,r;r=(a%b+b)%b;if (b%r==0){k1=1;k2=(r-a)/b;return;}else{Calculate(b,r);tmp=k1;k1=k2;k2=(tmp-k2*(a/b));return;}}int main(){//ifstream infile("test.txt");//ofstream outfile("result.txt");long long x,y,m,n,l;long long t;//infile>>x>>y>>m>>n>>l;cin>>x>>y>>m>>n>>l;if (m==n){cout<<"Impossible"<<endl;return 0;}long long gcd;if (m-n<0)gcd=GetGcd(n-m,l);elsegcd=GetGcd(m-n,l);if ((x-y)%gcd==0){Calculate((n-m)/gcd,l/gcd);k1=k1*(x-y)/gcd;k2=k2*(x-y)/gcd;t=l/gcd;k1=(k1%t+t)%t;cout<<k1<<endl;} else{cout<<"Impossible"<<endl;}//infile.close();//outfile.close();return 0;}
参考资料:一个关于本题解题报告的PPT,不过写的比较潦草
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会
- POJ 1061 青蛙的约会
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会
- POJ 1061 青蛙的约会
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会
- POJ 1061 青蛙的约会
- POJ-1061-青蛙的约会
- POJ 1061 青蛙的约会
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会
- POj 1061 青蛙的约会
- CFI查询(五)
- 设计模式学习笔记——模板方法模式
- Practice Every Day_16(添加索引)
- POJ Flip Game
- 我喜欢的小说杀神最新章节 第九百二十章 玩的溜啊!
- POJ 1061 青蛙的约会
- 宏定义使用
- ubuntu11.10 中gedit 中文乱码显示解决
- rgba()和opacity的使用
- Android自定义View研究(七)--XML中布局自定义View时View触摸原点问题
- -1.#IND0 1.#qnan0
- eclipse中删除某一行
- Android 代码用来返回上一个activity 调用onKeyDown()时发生java.lang.NullPointerException.
- 平衡树的练习