杭电水题之1713

来源:互联网 发布:nginx 外网代理 编辑:程序博客网 时间:2024/05/01 08:14

我已无力吐槽此题,稍微有点文化的人都不会把题出成这样,不过说归说,这题还是应该做的。只是这题有几点要说明的。这是中文题,应该都理解吧。

只是此题的意思和我们平时所说的相遇有点不一样,我们的意识一般就是跑的块的比跑的慢的多跑了一圈(相同的时间内)。但是此题的意识是在哪里出发就在那里相遇,就是说相遇的时候,两者都回到了原来的地方。而且根据答案的说法应该是他说反了,就是说原来是(26501/6335,表示转26501圈要6335天)实际是转6335圈需要26501天,最后要说说的就是如何求这题的相遇周期。说白了相遇周期就是两个周期减分之后的最小公倍数,比如一个是转一圈两天,另一个是一天自然就是2天是相遇周期了。在这可能不是一个整数,分数的最小公倍数是这么求得,分母是两者的分母的最小公倍数,分子式分子的最大公约数。而且还有一点就原来求得就是单周期(就是转一圈所需的时间)必须输两书互质(除了一没有别的公约数),所以此题第一步需要将两者的单周期化简,下面是一个可以AC的代码。大家参考下:

#include<stdio.h>_int64 f(_int64 m,_int64 n){    _int64 a;    while(a)    {        a=m%n;        m=n;        n=a;    }    return m;}int main(){  int n;  _int64 a1,t1,a2,t2,a,b,a11,a12;  char ch1,ch2;  scanf("%d",&n);  while(n--)  {     scanf("%I64d%c%I64d",&t1,&ch1,&a1);     scanf("%I64d%c%I64d",&t2,&ch2,&a2);        a11=f(t1,a1);        a1/=a11;        t1/=a11;        a12=f(t2,a2);        a2/=a12;        t2/=a12;       a=f(t1,t2);      t1=t1/a*t2;      b=f(a1,a2);      if(t1%b==0)          printf("%I64d\n",t1/b);          else printf("%I64d/%I64d\n",t1,b);  }  return 0;

}