题目链接:

https://cn.vjudge.net/problem/POJ-1061

题目大意:

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。

解题思路:

假设t时刻相遇

有:(x + mt) = (y + nt) (mod L)

也就是 x + mt - y - nt  = K * L

(m - n) * t + K * L = y - x

(因为K取任意整数,移到方程左端可以不管他的正负,反正对求出的K不处理)

也就是:a * t + b * K = y - x   a = m - n   b = L 求解t和K

特判 a = 0 的时候 x = y解为0,反之无解

当a < 0时,标记一下,然后a取正数,最后求出的t再取一下相反数即可

对于ax + by = c的求解

先求解ax + by = gcd(a, b) 求出x0,y0

如果gcd(x, y)整除c则有解,反之无解

根据x0 y0可得到一解:

x1 = x0 * c / gcd(a, b)

y1 = y0 * c / gcd(a, b)

所有解:

x = x1 + b / gcd(a, b) * t

y = y1 + a / gcd(a, b) * t

最小正数x的解

b` = b / gcd(a, b)

a` = a / gcd(a, b)

x2 = ((x1 % b`) + b`) % b`

y2 根据x2计算出来

同理可求出最小正数y的解

 #include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
ll extgcd(ll a, ll b, ll&x, ll&y)//ax+by = gcd(a, b)的解。返回值为gcd
{
ll d = a;
if(b)
{
d = extgcd(b, a % b, y, x);
y -= (a / b) * x;
}
else x = , y = ;
return d;
}
int main()
{
ll x, y, m, n, l;
cin >> x >> y >> m >> n >> l;
ll xx, yy;
ll a = m - n, b = l;
if(a == )
{
if(x == y)cout<<""<<endl;
else cout<<"Impossible"<<endl;
return ;
}
bool flag = ;
if(a < )a = -a, flag = ;
ll g = extgcd(a, b, xx, yy);
if((y - x) % g)cout<<"Impossible"<<endl;
else
{
xx = xx * (y - x) / g;
if(flag)xx = -xx;
l = l / g;
xx = ((xx % l) + l) % l;
cout<<xx<<endl;
}
return ;
}

POJ-1061 青蛙的约会---扩展欧几里得算法的更多相关文章

  1. 解题报告:poj1061 青蛙的约会 - 扩展欧几里得算法

    青蛙的约会 writer:pprp Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 119716 Accepted: 25238 ...

  2. Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)

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

  3. poj 1061 青蛙的约会 (扩展欧几里得模板)

    青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status ...

  4. POJ 1061 青蛙的约会(扩展GCD求模线性方程)

    题目地址:POJ 1061 扩展GCD好难懂.. 看了半天.最终把证明什么的都看明确了. .推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> ...

  5. POJ 1061 青蛙的约会 扩展欧几里德--解不定方程

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 81606   Accepted: 14116 Descripti ...

  6. poj 1061 青蛙的约会 扩展欧几里德

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K       Description 两 只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们 ...

  7. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ...

  8. poj 1061 青蛙的约会(扩展gcd)

    题目链接 题意:两只青蛙从数轴正方向跑,给出各自所在位置, 和数轴长度,和各自一次跳跃的步数,问最少多少步能相遇. 分析:(x+m*t) - (y+n*t) = p * L;(t是跳的次数,L是a青蛙 ...

  9. POJ - 1061 青蛙的约会 扩展欧几里得 + (贝祖公式)最小正整数解

    题意: 青蛙 A 和 青蛙 B ,在同一纬度按照相同方向跳跃相同步数,A的起点为X ,每一步距离为m,B的起点为Y,每一步距离为 n,一圈的长度为L,求最小跳跃步数. 思路: 一开始按照追击问题来写, ...

  10. POJ 1061 青蛙的约会 扩展欧几里得

    扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...

随机推荐

  1. EF 连接到 Azure-SQL

    using Autofac; using Autofac.Integration.Mvc; using System; using System.Collections.Generic; using ...

  2. Autofac +webapi 配置

    Autofac配置 using Autofac; using System; using System.Collections.Generic; using System.Linq; using Sy ...

  3. Make sure that the controller has a parameterless public constructor.

    An error occurred when trying to create a controller of type 'CCD.Web.Controllers.TWAccountControlle ...

  4. web.xml配置文件中async-supported报错解决

    项目中配置spring时async-supported报错: 是因为<async-supported>true</async-supported>是web.xml 3.0的新特 ...

  5. java 类与对象基础整理

    之前学习javaSE的时候,没有针对性地对对类与对象的一些基础进行整理,下面这些内容是笔记内容整理后的,希望以后自己可以通过这些博客时常复习! 一.类and对象的基础 类似于类的生命啊,类与对象的关系 ...

  6. 添加jquery脚本文件

    对于后台添加JQuery需要加上../js {insert_scripts files ="../js/jquery.1.14.min.js"}

  7. JAVA线程池的原理分析

    线程池的作用 1.降低资源的消耗 2.提高效率 3.方便管理 相关概念 corePoolSize核心线程数:核心池的大小,当有任务到达之后,就会创建一个线程去执行任务,当任务数量到达核心线程数后,就会 ...

  8. 一些在线开发手册api文档收藏

    java JavaSE8 api:https://docs.oracle.com/javase/8/docs/api/ JavaSE7 api:http://docs.oracle.com/javas ...

  9. java swing画图片爱心

    第一次用swing做一个可视化程序,写第一篇随笔,有写的不好的地方请多多见谅.上个星期三在网上看到一个画爱心的软件,就想着自己用java也实现一个程序,画爱心用到的数学函数知识在网上百度的,不是本人原 ...

  10. 第10章 布局样式相关-伸缩布局(Flexible Box)

    伸缩布局(一) CSS3引入了一种新的布局模式--Flexbox布局,即伸缩布局盒模型(Flexible Box),用来提供一个更加有效的方式制定.调整和分布一个容器里项目布局,即使它们的大小是未知或 ...