• 【luogu1516】 青蛙的约会 [扩展欧几里德]


    P1516 青蛙的约会

    可以推出来 (x+va*t)-(y+vb*t)=p*l     然后化成(l*p+(b-a)*t+l*p=x-y

    然后有一个我也不晓得叫什么的定理 a*x+b*y=c 如果gcd(a,b)不能整除c 那无解

    然后还有一个我还是不晓得名字的东西 先求出方程a*x+b*y=c的一个解x0 y0 然后通解为 x=x0-b*t y=y0+a*t  t为整数

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 ll xa,xb,va,vb,l;
     5 
     6 template<class t>void rd(t &x)
     7 {
     8     x=0;int w=0;char ch=0;
     9     while(!isdigit(ch)) w|=ch=='-',ch=getchar();
    10     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    11     x=w?-x:x;
    12 }
    13 
    14 ll exgcd(ll a,ll b,ll &x,ll &y)
    15 {
    16     if(!b) {x=1,y=0;return a;}
    17     ll r=exgcd(b,a%b,x,y);
    18     ll t=x;x=y,y=t-a/b*y;
    19     return r;
    20 }
    21 
    22 int main()
    23 {
    24     rd(xa),rd(xb),rd(va),rd(vb),rd(l);
    25     int b=vb-va,a=xa-xb;
    26     if(b<0) b=-b,a=-a;
    27     if(va==vb) printf("Impossible"),exit(0);//速度一样
    28     ll x,y,gcd=exgcd(b,l,x,y);
    29     if((xb-xa)%gcd) printf("Impossible"),exit(0);
    30     printf("%lld",(x*(a/gcd)%(l/gcd)+l/gcd)%(l/gcd));
    31     return 0;
    32 }

    嘿嘿嘿

  • 相关阅读:
    Codeforces Round #411 (Div. 2)
    腾讯比赛资料
    AtCoder Beginner Contest 060
    hdu 5288 数学 ****
    hdu 1866 几个矩形面积的和 ***
    hdu 2232 矩阵 ***
    bzoj 1415 期望+记忆化搜索 ****
    hdu 5033 单调栈 ****
    hdu 3032 sg打表找规律 *
    hdu 2516 FIB博弈
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/10577228.html
Copyright © 2020-2023  润新知