POJ 1061
约会果然是件头疼的问题
看起来很简单
列了个式子就不知道怎么做了
数论题
欺负我数学不好
Attention:
(Ax+b)%C==0
有解条件为 b%gcd(A,C)==0;
证明在代码里
1 #include <stdio.h> 2 #include <iostream> 3 using namespace std; 4 5 long long x,y,m,n,L,dist; 6 //辗转相除求最大公约数 7 int gcd(int a,int b) 8 { 9 if(b==0)return a; 10 return gcd(b,a%b); 11 } 12 // 把跳的慢的视为相对静止 13 int main() 14 { 15 while(cin>>x>>y>>m>>n>>L) 16 { 17 //计算出两只青蛙的距离差 18 //先比较快慢 19 if(m>n) 20 dist=(y-x+L)%L; 21 else 22 { 23 dist=(x-y+L)%L; 24 int temp=m; 25 m=n; 26 n=temp; 27 } 28 29 //现在证明判断条件 30 //等式为: (i*L+dist)%(m-n)==0 31 //若有解 let t = gcd(L,m-n) 32 //let L = ct;m-n = bt; 33 //ict +dist = bkt 34 //dist = (bk - ic)t 35 //dist % t = 0; 36 if(dist%gcd(m-n,L)!=0) 37 { 38 cout<<"Impossible"<<endl; 39 continue; 40 } 41 long long k=0; 42 int i =0; 43 for(int i=0;; i++)//暴力来试出结果 44 { 45 if((i*L+dist)%(m-n)==0) 46 { 47 k=(i*L+dist)/(m-n); 48 break; 49 } 50 } 51 cout<<k<<endl; 52 } 53 return 0; 54 }