POJ-1061 青蛙的约会---扩展欧几里得算法
题目链接:
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 青蛙的约会---扩展欧几里得算法的更多相关文章
- 解题报告:poj1061 青蛙的约会 - 扩展欧几里得算法
		青蛙的约会 writer:pprp Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 119716 Accepted: 25238 ... 
- Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)
		一.Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ... 
- poj 1061 青蛙的约会 (扩展欧几里得模板)
		青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status ... 
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
		题目地址:POJ 1061 扩展GCD好难懂.. 看了半天.最终把证明什么的都看明确了. .推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> ... 
- POJ 1061 青蛙的约会 扩展欧几里德--解不定方程
		青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 81606 Accepted: 14116 Descripti ... 
- poj 1061 青蛙的约会 扩展欧几里德
		青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Description 两 只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们 ... 
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
		手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ... 
- poj 1061 青蛙的约会(扩展gcd)
		题目链接 题意:两只青蛙从数轴正方向跑,给出各自所在位置, 和数轴长度,和各自一次跳跃的步数,问最少多少步能相遇. 分析:(x+m*t) - (y+n*t) = p * L;(t是跳的次数,L是a青蛙 ... 
- POJ - 1061 青蛙的约会 扩展欧几里得 + (贝祖公式)最小正整数解
		题意: 青蛙 A 和 青蛙 B ,在同一纬度按照相同方向跳跃相同步数,A的起点为X ,每一步距离为m,B的起点为Y,每一步距离为 n,一圈的长度为L,求最小跳跃步数. 思路: 一开始按照追击问题来写, ... 
- POJ 1061 青蛙的约会 扩展欧几里得
		扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ... 
随机推荐
- Java代码在本地运行没有问题。上传到阿里云服务器后。出现了中文乱码解决
			java -Dfile.encoding=UTF-8 -jar project.jar 
- [转]时序列数据库武斗大会之什么是TSDB
			由于工作上的关系,最近看了一些关于时序列数据库的东西,当然,我所看的也都是以开源方案为主. 趁着这股热劲还没退,希望能整理一些资料出来.如果正好你也有这方面的需求,那么希望这一系列的介绍能够帮助到你. ... 
- 微软的TransactionScope类是个好玩意
			最近发现微软自带的TransactionScope(.Net Framework 2之后)是个好东东,提供的功能也很强大. 首先说说TransactionScope是什么,并能为我们做什么事情.其实看 ... 
- Javascript屏蔽鼠标的右键的两种方法。
			方法一:利用鼠标button的键值 <script language="javascript"> function blockright(oEvent) { var o ... 
- Node.js学习笔记(四) --- fs模块的使用
			目录 . fs.stat 检测是文件还是目录 . fs.mkdir 创建目录 . fs.writeFile 创建写入文件 . fs.appendFile 追加文件 . fs.readFile 读取文件 ... 
- 在JSP中将EXEL文件的数据传入到数据库中
			在jsp中: 在script中使用函数: $(function(){ //var lpyear = document.getElementById("lpyear").value; ... 
- <%@ page isELIgnored="false"%>的作用
			JSP 2.0的一个主要特点是它支持表达语言(expression language).JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流 ... 
- 简单的数据库连接池实例(java语言)
			1.概述 频繁的创建和销毁数据库连接消耗非常多的系统资源,创建一个池子, 管理一定数量的连接,用的时候去池中取,用完了放回池中,这时比较通用的做法. 2.关键字 LinkedList synchro ... 
- mac下打开hosts文件
			1打开控制台 输入vi(空格)/etc/hosts 进入hosts文件,输入i更改为编辑状态,更改完esc然后shift+:在输入wq保存退出 2打开Finder然后选择上面前往,到前往文件夹,输入/ ... 
- Java中避免空指针的几个方法
			equals Object类中的equals 方法在非空对象引用上实现相等关系,具有对称性 x.equals(y) 和 y.equals(x) 结果是一样的,但当x == null时会抛出空指针异常 ... 
