dalao们真是太强了,吊打我无名蒟蒻

我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的)

进入正题

如果不会扩展欧里几德的话请先去做

洛谷 p1082 同余方程

设跳了k次

所以km - kn + x - y = 0(mod l)

所以k(m - n) + h * l = y - x

这个移项应该没问题吧

设(m - n)为a,k为x,h为y,

l为b,(y - x)为m

那么转换为ax + by = m

根据裴蜀定理ax + by = gcd(a,b)有解

但不代表ax + by = m无解

我们可以让等式两边同除一个m,再同乘一个gcd(a,b)

就成了ax / m * gcd(a,b) + by / m * gcd(a,b) = gcd(a,b)

把(x / m * gcd(a,b))作为新的x,(y / m * gcd(a,b))作为新的y

再利用扩展欧里几德可以求出新的x

即(x / m * gcd(a,b))

我们如果求出了(x / m * gcd(a,b)),那么也可以求出x(乘一个m再除一个gcd就好了)

但是这并不意味这每个方程都有解,因为我们的x代表的是k

也就是x代表跳的次数,所以仅可以作为整数

也就是如果我们必须让 m整除gcd(a,b)即m % gcd(a,b) == 0

如果m % gcd(a,b)不等于0,那么方程无解

#include<bits/stdc++.h>

using namespace std;

inline long long read(){long long s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;}

long long xx,yy,t,AC = 0;

long long gcd(long long x,long long y){//求gcd
if(y == 0) return x;
return gcd(y,x % y);
} void exgcd(long long a,long long b){//正宗exgcd
if(b == 0){
xx = 1;
yy = 0;
return ;
}
exgcd(b,a % b);
t = xx;
xx = yy;
yy = t - a / b * yy;
} int main()
{
long long x = read(),y = read();
long long m = read(),n = read();
long long l = read(); long long a = n - m,b = l,mm = x - y;
if(a < 0){//我们让第一只青蛙开始再第二只后面,如果不是这样就调换位置(~~因为青蛙是一样的~~)
mm = -mm;
a = -a;
}
long long g = gcd(a,b);
long long t = b / g; if(mm % g){//不是0则无解
cout<<"Impossible"<<endl;
return AC;
} exgcd(a,b);
long long ans = xx * (mm / g);//我以为答案就是这样 cout<<(ans % t + t) % t<<endl;//至于%t+t%t也是看了其他大佬的题解才知道的,不过我并不知道为什么,(太弱了,雾) return AC;//返回AC保平安
}

洛谷 p1516 青蛙的约会 题解的更多相关文章

  1. 洛谷 P1516 青蛙的约会 解题报告

    P1516 青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...

  2. 洛谷——P1516 青蛙的约会

    P1516 青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...

  3. 洛谷P1516 青蛙的约会(扩展欧几里德)

    洛谷题目传送门 很容易想到,如果他们相遇,他们初始的位置坐标之差\(x-y\)和跳的距离\((n-m)t\)(设\(t\)为跳的次数)之差应该是模纬线长\(l\)同余的,即\((n-m)t\equiv ...

  4. 洛谷P1516 青蛙的约会

    题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清 ...

  5. 洛谷 P1516 青蛙的约会

    https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...

  6. P1516 青蛙的约会和P2421 [NOI2002]荒岛野人

    洛谷 P1516 青蛙的约会 . 算是手推了一次数论题,以前做的都是看题解,虽然这题很水而且还交了5次才过... 求解方程\(x+am\equiv y+an \pmod l\)中,\(a\)的最小整数 ...

  7. 【题解】P1516 青蛙的约会(Exgcd)

    洛谷P1516:https://www.luogu.org/problemnew/show/P1516 思路: 设两只青蛙跳了T步 则A的坐标为X+mT   B的坐标为Y+nT 要使他们相遇 则满足: ...

  8. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  9. P1516 青蛙的约会

    P1516 青蛙的约会x+mt-p1L=y+nt-p2L(m-n)t+L(p2-p1)=y-x令p=p2-p1(m-n)t+Lp=y-x然后套扩欧就完事了 #include<iostream&g ...

随机推荐

  1. tomcat闪退的解决思路

    用Tomcat总会遇到启动Tomcat闪退的问题. 什么叫闪退啊,就是闪一下,就退出了控制台. 都闪退了,为啥闪退也不知道呀,又没有错误信息,所以就要先阻止闪退,先看到错误信息,知道启动不起来的原因. ...

  2. 【02】Python:数据类型和运算符

    写在前面的话 任何编程语言一开始都是从概念出发的,但各种编程语言之间的概念可能又会有差异,所以,老生常谈,我们还是需要从新过一遍 Python 的概念,当然,如果你已经是老司机了,完全可以一晃而过,不 ...

  3. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法

    https://www.jb51.net/article/157457.htm 下载32位版本安装即可 Microsoft Access Database Engine Redistributable ...

  4. windows 10 配置Java 环境变量(5步骤)

    前提:1.windows 10 系统(不是win8,也不是win7)2.安装JDK步骤 1. 打开 环境变量窗口右键 This PC(此电脑) -> Properties(属性) -> A ...

  5. Python - 基础语法 - 第一天

    编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 标识符 第一个字符必须是字母表中字母或下划线 _ . 标识符的其他的部分由字母.数字和下划线 ...

  6. PIESDK二次开发基础视频

    第0讲:PIESDKNet二次开发环境配置 第1讲:PIE产品简介及开发介绍 第2讲:PIE架构及常用控件介绍 第3讲:PIESDK常用功能实践 第4讲:XML插件配置及组件式开发界面搭建 第5讲:地 ...

  7. rabbitMQ基础应用

    1.安装erlang [root@localhost ~]#yum -y install erlang 2.安装rabbitMQ [root@localhost ~]#yum -y install r ...

  8. JAVA中调用外部程序,并等待其退出(涉及Runtime和ProcessBuilder)

    这段时间要写一个java调用外部程序的功能,踩了几个坑,这里分享一下. 首先用的是RunTime,调用代码如下: Process pro = Runtime.getRuntime().exec(&qu ...

  9. Windows下VS Code打开黑屏解决办法(这样真的行)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_42421611/article/d ...

  10. javascript 对象的创建与继承模式

    针对JS高级程序设计这本书,主要是理解概念,大部分要点源自书内.写这个主要是当个笔记加总结 存在的问题请大家多多指正! 6.1理解对象 创建对象的两个方法(暂时) //第一种,通过创建一个Object ...