洛谷——P1516 青蛙的约会
P1516 青蛙的约会
题目描述
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。
输入格式:
输入只包括一行5个整数x,y,m,n,L
通过题目可以很容易的看出一个方程
$x+km≡y+kn (mod L)$
相当于$x-y+k(m-n)≡0(mod L)$
也就是说$x-y+k(m-n)=pL$
移项得$k(m-n)-pL=y-x$
相当于$k(n-m)+pL=x-y$
观察一下,这个式子是不是和$ax+by=gcd(a,b)$相类似
对,其实这就是扩展gcd,对于任何这样的式子来求解$x,y$的值,
对于式子解的有无,条件是$ax+by=W$中$W$可以整除$gcd(a,b)$
对于这个式子解的通项为

有点儿=_=,既然这样,那么最小解是什么?,转大佬博客%%%Flashhu%%%
前置条件:求解$ax+by=c$的一个解,$c$不一定等于$gcd(a,b)$
设$g=gcd(a,b)$,我们利用$exgcd$可以求出$ax_0+by_0=g$其中一个解$x_0$
因为$\frac{ax+by}{g}$是整数,所以$\frac{c}{g}$也必须是一个整数,否则无解。
然后这个式子两边同乘$\frac{c}{g}$,得$a\frac{cx_0}{g}+b\frac{cy_0}{g}=c$
那么,$x=\frac{cx_0}{g}$就是$ax+by=c$中$x$的一个解
由一解推多解,有一恒等式$a(x+db)+b(y-da)=c$
在保证$db$,$da$都是整数的情况下,我们让$d$最小,就可以得到所有的整数解,那么$d=\frac{1}{g}$
那么最小非负整数解极为$x+\frac{b}{g}\%\frac{b}{g}$
由于$gcd$只对非负整数有意义,如果$a<0$,等式两边要同时取反,$b$本来就是正数,不能变也不用变
#include<bits/stdc++.h> #define LL long long
using namespace std; inline LL exgcd(LL a,LL b,LL &x,LL &y){
if(!b){
x=;y=;
return a;
}
LL an=exgcd(b,a%b,x,y);
LL tmp=x;x=y;y=tmp-a/b*y;
return an;
} LL n,m,x,y,L; int main()
{
scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&L);
LL xx,yy;
LL gc,A=(n-m),g=(x-y);
if(A<) A=-A,g=-g;
gc=exgcd(A,L,xx,yy);
if(g%gc!=) printf("Impossible");
else {
printf("%lld",(xx*(g/gc)%(L/gc)+L/gc)%(L/gc));
}
return ;
}
洛谷——P1516 青蛙的约会的更多相关文章
- 洛谷 P1516 青蛙的约会 解题报告
P1516 青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
- 洛谷 p1516 青蛙的约会 题解
dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...
- 洛谷P1516 青蛙的约会(扩展欧几里德)
洛谷题目传送门 很容易想到,如果他们相遇,他们初始的位置坐标之差\(x-y\)和跳的距离\((n-m)t\)(设\(t\)为跳的次数)之差应该是模纬线长\(l\)同余的,即\((n-m)t\equiv ...
- 洛谷P1516 青蛙的约会
题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清 ...
- 洛谷 P1516 青蛙的约会
https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...
- P1516 青蛙的约会和P2421 [NOI2002]荒岛野人
洛谷 P1516 青蛙的约会 . 算是手推了一次数论题,以前做的都是看题解,虽然这题很水而且还交了5次才过... 求解方程\(x+am\equiv y+an \pmod l\)中,\(a\)的最小整数 ...
- 【题解】P1516 青蛙的约会(Exgcd)
洛谷P1516:https://www.luogu.org/problemnew/show/P1516 思路: 设两只青蛙跳了T步 则A的坐标为X+mT B的坐标为Y+nT 要使他们相遇 则满足: ...
- 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 ...
- 解题报告:luogu P1516 青蛙的约会
题目链接:P1516 青蛙的约会 考察拓欧与推式子\(qwq\). 题意翻译? 求满足 \[\begin{cases}md+x\equiv t\pmod{l}\\nd+y\equiv t\pmod{l ...
随机推荐
- HTTP要点概述:十,内容协商
一,内容协商(Content Negotiation) 同一个Web网站可能存在很多份相同内容的页面,比如英文版和中文版的Web页面,它们内容上相同,但是使用语言不同.比如大家进入英文版的google ...
- 【Codevs 3115】高精度练习之减法
http://codevs.cn/problem/3115/ 板子题~ // <H.cpp> - Sun Oct 9 12:58:23 2016 // This file is made ...
- MySQL-day1数据库的安装与介绍
一.mysql的安装步骤 以5.7.20版本为例: 第1步: 第2步: 第3步: 第4步: 第5步: 第6步: 第7步: 第8步: 第9步: 第10步: 第11步: 第12步: 第13步: 第14步: ...
- the odb manual
http://www.codesynthesis.com/products/odb/doc/manual.xhtml#18.4
- linux线程相关函数接口
以下内容转自网络 索引:1.创建线程pthread_create2.等待线程结束pthread_join3.分离线程pthread_detach4.创建线程键pthread_key_create5.删 ...
- J20170527-ts
足場 立脚点.脚手架 scaffold ハイパーリンク 超链接 hyperlink アンカータグ 锚标签 でしゃばり 多嘴.多事.多管闲事的人,好出风头的人 でしゃばる 多管闲事 節介 ...
- bzoj4987: Tree(树形dp)
Description 从前有棵树. 找出K个点A1,A2,…,Ak. 使得∑dis(AiAi+1),(1<=i<=K-1)最小. Input 第一行两个正整数n,k,表示数的顶点数和 ...
- 3-3 编程练习:jQuery键盘事件案例
3-3 编程练习 完善下面的代码,在input框中输入内容的时候同样显示在下面的p标签中 <!DOCTYPE html> <html lang="zh-CN"&g ...
- Unity项目 - Boids集群模拟算法
1987年Craig W.Reynolds发表一篇名为<鸟群.牧群.鱼群:分布式行为模式>的论文,描述了一种非常简单的.以面向对象思维模拟群体类行为的方法,称之为 Boids ,Boids ...
- 探寻宝藏 --- 双线DP
双线DP , 在郑轻的时候 做过 这种双线DP , 这是多维DP 应该是比较简单的 但是那个 时间复杂度的优化 始终看不懂 . 先附上代码吧 , 等看懂了再来 , 补充一下 解释 . #in ...