zoukankan      html  css  js  c++  java
  • BZOJ1477 青蛙的约会 扩展欧几里德

    欢迎访问~原文出处——博客园-zhouzhendong

    去博客园看该题解


    题目传送门 - BZOJ1477


    题意概括

      两只青蛙,现在分别在x,y的位置,以m,n的速度在周长为L的环形跑道上面跑。

      问他们什么时候可以到同一个位置。(如果永远不能,则输出Impossible)


    题解

      扩展欧几里德模板题。

      设 a = x - y , b = n - m ,

      我们可以列出方程: ax ≡ b (mod L)                             (注意这里的x是一个未知数,不是读入的)

      然后写成二元一次方程的形式:  ax + Ly = b

      于是exgcd跑一跑就可以了。


    代码

    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    #include <cmath>
    #include <cstdio>
    using namespace std;
    typedef long long LL;
    LL x,y,n,m,L,a,b,c,g;
    LL ex_gcd(LL a,LL b,LL &x,LL &y){
    	if (b==0){
    		x=1,y=0;
    		return a;
    	}
    	LL res=ex_gcd(b,a%b,y,x);
    	y-=(a/b)*x;
    	return res;
    }
    int main(){
    	scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&L);
    	// ax = b (mod c)
    	// ax + by = c
    	a=n-m,b=L,c=x-y;
    	g=ex_gcd(a,b,x,y);
    	if (c%g){
    		puts("Impossible");
    		return 0;
    	}
    	c/=g;
    	x=(x*c%b+b)%b;
    	printf("%lld",x);
    	return 0;
    }
    

      

  • 相关阅读:
    Django超级用户
    12.23站立会议
    12.22站立会议
    12.21站立会议
    用户场景分析
    12.20站立会议
    12.19站立会议
    12.18战略会议
    四则运算
    MongoEngine中文文档
  • 原文地址:https://www.cnblogs.com/zhouzhendong/p/BZOJ1477.html
Copyright © 2011-2022 走看看