zoukankan      html  css  js  c++  java
  • 1477: 青蛙的约会

    1477: 青蛙的约会

    Time Limit: 2 Sec  Memory Limit: 64 MB
    Submit: 261  Solved: 164
    [Submit][Status][Discuss]

    Description

    两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。

    Input

    输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。

    Output

    输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"

    Sample Input

    1 2 3 4 5

    Sample Output

    4

    HINT

     

    Source

    题解:经典的扩展欧几算发,没记错的话我貌似在poj上A过此题= =
     1 /**************************************************************
     2     Problem: 1477
     3     User: HansBug
     4     Language: Pascal
     5     Result: Accepted
     6     Time:0 ms
     7     Memory:224 kb
     8 ****************************************************************/
     9  
    10 type
    11     vec=record
    12               x,y:int64;
    13     end;
    14 var
    15    i,j:longint;
    16    k,l,m,n,x,y,x1,x2,x3:int64;
    17    a1,a2:vec;
    18 function ex_gcd(a,b:int64):vec;
    19          var
    20             a1,a2:vec;
    21          begin
    22               if b=0 then
    23                  begin
    24                       a1.x:=1;a1.y:=0;
    25                       ex_gcd:=a1
    26                  end
    27               else
    28                   begin
    29                        a1:=ex_gcd(b,a mod b);
    30                        a2.x:=a1.y;
    31                        a2.y:=a1.x-(a div b)*a1.y;
    32                        ex_gcd:=a2;
    33                   end;
    34          end;
    35 function gcd(x,y:int64):int64;
    36          var
    37             z:int64;
    38          begin
    39               while y<>0 do
    40                     begin
    41                          z:=x mod y;
    42                          x:=y;
    43                          y:=z;
    44                     end;
    45               gcd:=x;
    46          end;
    47 begin
    48      readln(x,y,m,n,l);
    49      a1:=ex_gcd(m-n,-l);
    50      k:=gcd(m-n,-l);
    51      if ((y-x) mod k)<>0 then
    52         begin
    53              writeln('Impossible');
    54              halt;
    55         end;
    56      x1:=(y-x) div k;
    57      a1.x:=a1.x*x1;
    58      a1.y:=a1.y*x1;
    59      if a1.x>0 then a1.x:=a1.x mod l else a1.x:=((a1.x mod l)+2*l) mod l;
    60      writeln(a1.x);
    61 end.
     
  • 相关阅读:
    tabsGif
    this.$refs.tabs.activeKey ref就是vue里面的id
    @click.native 会触发原生 click事件 vue
    Web Server Notifier 是chrome网上商店的一个插件
    autoOpenBrowser: true, 运行npm后自动打开浏览器
    总结vue2.0 配置的实例方法
    chrome 打开上次关闭的tab ctrl+shift+T
    动态菜单路由
    gitee 如何创建仓库 及发布
    小白接口
  • 原文地址:https://www.cnblogs.com/HansBug/p/4472318.html
Copyright © 2011-2022 走看看