昨天打code+的时候发现自己已经不大会exgcd了。。赶紧复习一下QAQ

求$ax+by=gcd(a,b)$的解

  初始条件

$gcd(a, 0)=a$

$x=1,y=0$

  推导过程

$gcd(a,b)=gcd(b,a\%b)$

$ax'+by'=bx+(a-\left \lfloor \frac{a}{b} \right \rfloor *b)y$

$ax'+by'=ay+bx-\left \lfloor \frac{a}{b} \right \rfloor *by$

$ax'+by'=ay+b(x-\left \lfloor \frac{a}{b} \right \rfloor *y)$

$x'=y,y'=x-\left \lfloor \frac{a}{b} \right \rfloor *y$

  然后大概就完了

  对于求$ax+by=c$的话,先求$ax+by=gcd(a,b)$的一个解$x_0,y_0$,则$x'=x_0*c/d,y'=y_0*c/d$即为$ax+by=c$的一个解,因为$d*c/d=c$嘛,显然...注意如果不满足$gcd(a,b)|c$就无解,更相减损术可证。

  设$d=gcd(a,b)$。求出$ax+by=c$的一个整数解$x_0,y_0$后,其他整数解可以用$x_0-b/d,y_0+a/d$求得。因为显然$a(x_0-b)+b(y_0+a)=c$是满足的,但是其实最小的间隔应该要除以最大公约数,所以$a(x_0-b/d)+b(y_0+a/d)=c$也是成立的。

ll exgcd(ll a, ll b, ll &x, ll &y)
{
if(!b) return x=, y=, a;
int ans=exgcd(b, a%b, x, y);
ll t=x; x=y; y=t-a/b*y;
return ans;
}

  

  回到这题上

$x+am\equiv y+an\ (mod\ L)$

$a(m-n)+bL=y-x$

  令$a=m-n,b=L,c=y-x$,就变成$ax+by=c$的形式了。

  要求得最小正整数解,就是要求$(((x_0\% |b/d|)+|b/d|)\%|b/d|)$,然后这题就完了。

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=, inf=1e9;
ll X, Y, m, n, L, a, b, c, d, x, y, p;
inline void read(ll &k)
{
int f=; k=; char c=getchar();
while(c<'' || c>'') c=='-'&&(f=-), c=getchar();
while(c<='' && c>='') k=k*+c-'', c=getchar();
k*=f;
}
ll exgcd(ll a, ll b, ll &x, ll &y)
{
if(!b) return x=, y=, a;
int ans=exgcd(b, a%b, x, y);
ll t=x; x=y; y=t-a/b*y;
return ans;
}
int main()
{
read(X); read(Y); read(m); read(n); read(L);
a=m-n; b=L; c=Y-X; d=exgcd(a, b, x, y);
if(c%d!=) return puts("Impossible"), ;
x=x*(c/d); b/=d; p=b>?b:-b;
x=((x%p)+p)%p; x+=x?:p;
printf("%lld\n", x);
}

bzoj1477: 青蛙的约会(exgcd)的更多相关文章

  1. [BZOJ1477]青蛙的约会

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

  2. P1516/bzoj1477 青蛙的约会

    青蛙的约会 exgcd 根据题意列出方程: 设所用时间为T,相差R圈时相遇 (x+T*m)-(y+T*n)=R*l 移项转换,得 T*(n-m)-R*l=x-y 设a=n-m,b=l,c=x-y,x_ ...

  3. BZOJ-1477 青蛙的约会 拓展欧几里德

    充权限之前做的...才来交 1477: 青蛙的约会 Time Limit: 2 Sec Memory Limit: 64 MB Submit: 369 Solved: 233 [Submit][Sta ...

  4. BZOJ1477 青蛙的约会 扩展欧几里德

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1477 题意概括 两只青蛙,现在分别在x,y的位置,以m,n的速度在周长为L的环形跑道上面跑. 问他 ...

  5. POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]

    先上干货: 定理1: 如果d = gcd(a,b),则必能找到正的或负的整数k和l,使ax + by = d. (参考exgcd:http://www.cnblogs.com/dilthey/p/68 ...

  6. p1516&poj1061&bzoj1477 青蛙的约会

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

  7. POJ1061 青蛙的约会 exgcd

    这个题虽然很简单,但是有一个比较坑的地方,就是gcd不一定是1,有可能是别的数.所以不能return 1,而是return a; 题干: Description 两只青蛙在网上相识了,它们聊得很开心, ...

  8. 【BZOJ1477】青蛙的约会(拓展欧几里得)

    [BZOJ1477]青蛙的约会(拓展欧几里得) 题面 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为 ...

  9. POJ1061青蛙的约会[扩展欧几里得]

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 108911   Accepted: 21866 Descript ...

随机推荐

  1. Lodop打印设计(PRINT_DESIGN)里的快捷键

    Lodop打印控件,给开发人员提供了可视化编辑工具,编辑后可生成代码,然后复制到自己程序代码中,让开发更简单,打印设计中有一些快捷键也能让开发更便捷. 打印设计快捷键:ctrl 多个选中Shift 左 ...

  2. maven 引用另一个jar包 需要先打包在仓库里面 并在pom里面配置 才可以引用

    maven 引用另一个jar包 需要先打包在仓库里面 并在pom里面配置 才可以引用

  3. BZOJ5206 JSOI2017原力(三元环计数)

    首先将完全相同的边的权值累加.考虑这样一种trick:给边确定一个方向,由度数小的连向度数大的,若度数相同则由编号小的连向编号大的.这样显然会得到一个DAG.那么原图的三元环中就一定有且仅有一个点有两 ...

  4. Leetcode 20.有效的括号 By Python

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  5. 自学Python4.6-迭代器

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  6. luogu1850 [NOIp2016]换教室 (floyd+dp)

    首先floyd求出每两点间的距离(注意自己到自己的距离要设成0) 然后就是dp了 一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化 然后一翻题解 ...

  7. Windows下查看游戏服务器的IP地址

    在任务管理器中查看进程的PID 在cmd中使用netstat -aon,找到PID对应的IP地址

  8. [HNOI/AHOI2018]转盘

    一个结论:一定存在一个最优解只走一圈.否则考虑从最后一个结束位置开始一定可以达到相同效果 画个图,类似是一种斜线感觉 考虑一个高度贡献的最高点 对于i开始的连续n个,答案是:max(Tj-j)+i+n ...

  9. Flash与JavaScript互动

    最近做的一个项目需要用javascript来实现自动复制文本到剪切板,但测试时发现只有ie6.0支持. 到百度搜索后才发现,原来ie7.0.firefox是不支持这样的操作的,随后又搜索了一下,找到一 ...

  10. 关于vue里页面的缓存

    keep-alive是vue内置的一个组件,可以使被它包含的组件处于保留状态,或避免被重新渲染. 用法: 运行结果描述: input输入框内,路由切换输入框内部的内容不会发生改变. 在keep-ali ...