zoukankan      html  css  js  c++  java
  • 解题报告:luogu P1516 青蛙的约会

    题目链接:P1516 青蛙的约会
    考察拓欧与推式子(qwq)
    题意翻译?
    求满足

    [egin{cases}md+xequiv tpmod{l}\nd+yequiv tpmod{l}end{cases} ]

    的最小整数解(d)
    我们设(以下均满足(ngeqslant m)):

    [egin{cases}md+x=y_1l+t\nd+y=y_2l+tend{cases} ]

    两式相减,即得:

    [(n-m)d+(y-x)=l(y_2-y_1) ]

    这样我们就把不确定的(t)消掉了!
    我们再把它转化成模(l)意义的 :

    [(n-m)dequiv x-y+lpmod{l} ]

    扩欧解方程即可,无解即为(Impossible)
    时间复杂度是(O(logn)),可以通过本题。

    (Code):

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    long long l,x,y,m,n;
    inline void exgcd(ll a,ll b)
    {
    	if(b==0)
    	{
    		x=1,y=0;
    		return;
    	}
    	exgcd(b,a%b);
    	ll t=x;
    	x=y;
    	y=t-a/b*y;
    }
    ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
    void solve(ll a,ll b,ll c)
    {
    	ll g=gcd(a,b);
    	if(c%g!=0)
    	{
    		printf("Impossible
    ");
    		return;
    	}
    	a/=g,b/=g,c/=g;
    	exgcd(a,b);
    	x=x*c;
    	x=(x%b+b)%b;
    	printf("%lld
    ",x);
    }
    int main()
    {
    	scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
    	if(n<m) swap(x,y),swap(m,n);
    	solve((n-m)%l,l,(x-y+l)%l);
    	return 0;
    }
    
  • 相关阅读:
    关于nginx稳定版1.20.1 4层负载 stream模块失效
    Docker 容器内分析 java程序占用 cpu 高问题排查分析
    分组排序查第一第二的差值
    【album】语音合成技术
    8.juery
    7.dom
    6.对象
    5.函数
    4.数组
    3.JS
  • 原文地址:https://www.cnblogs.com/tlx-blog/p/12341835.html
Copyright © 2011-2022 走看看