膜几位有借鉴意义的大神的文章:
Description
一个圆形花圃被分为k个扇形区域(0,1,…,k-1)。有两只小鼹鼠A,B分别位于其中的两个区域。鼹鼠从一个扇形区域移动到相邻的区域需要1分钟。已知A鼹鼠总是沿顺时针方向移动(序号增大),B鼹鼠总是沿逆时针方向移动(序号减小),两只鼹鼠都是每隔一段时间钻出地面一次。
请你求出两只鼹鼠第一次同时在同一个扇形区域钻出地面的时间。
Input
- Line 1:一个整数k (1≤k≤10000) ,表示扇形区域的个数。
- Line 2:两个整数 la , lb (0≤la,lb<k) ,分别表示两只鼹鼠初始时所处的位置。
- Line 3:两个整数 ta , tb (0<ta,tb<100) ,分别为两只鼹鼠钻出地面的间隔时间。
- Line 4:两个整数 fa , fb (0≤fa<ta,0≤fb<tb) 分别为两只鼹鼠第一次钻出地面的时间。
Output
用一个整数表示两只鼹鼠第一次同时在同一个扇形区域钻出地面的时间。
若两只鼹鼠永远无法相遇,输出“no answer”。
Sample Input
7
1 5
3 5
1 2
Sample Output
37
欧几里得算法初步
1)辗转相除法
求解问题:两个整数a,b的最大公约数。
Code:
int gcd(int a,int b){
if(!b)return a;
return gcd(b,a%b);
}
证明: gcd(a,b)=gcd(b,a%b) 。
设 r=a%b ,则有 a=kb+r 。
- 设 d 为
a,b 的任意一个公因数,则有 d∣a,d∣b→d∣r=a−kb ;- 另设 d 为
b,r 的任意一个公因数,则有 d∣b,d∣r=a−kb→d∣a=kb+r 。由上可知 d 既是
a,b 的公因数,又是 b,a%b 的公因数,于是最大公约数也成立。命题得证。
2)扩展欧几里得算法
求解问题:在求解两数的最大公约数同时,可以求得二元一次不定方程 ax+by=gcd(a,b) (a,b∈N+ora=0,b∈N