青蛙的约会 - poj 1061(扩展欧几里得)
分析:这个东西在数论里面应该叫做不定方程式,可以搜一下,有很精彩的证明,先求出来方程式的一组特解,然后用这组特解来求通解,但是求出来特解之后怎么求这些解里面的最小非负x值?我们知道 x = x0 + bt, 假设x=0, 也就是最小值, 那么 t = x0/(-b), x0+x0/(-b)*b就是最小值了,当然如果结果是负的加上一个b即可。
代码如下:
================================================================================================================================
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std; const int MAXN = ;
const int oo = 1e9+; typedef long long LL; LL ExGcd(LL a, LL b, LL &x0, LL &y0)
{
if(b == )
{
x0 = , y0 = ;
return a;
} LL d = ExGcd(b, a%b, x0, y0); swap(x0, y0);
y0 = y0 - a/b * x0;///原式是 y0 = x0 - a/b * y0; return d;
}
int main()
{
LL x1, x2, L1, L2, L;
///青蛙AB的起始位置x1,x2
///青蛙AB每次跳跃的长度L1,L2
///纬度总线长度L
///假设总共跳跃x次,那么青蛙A的跳跃长度是 x1 + x*L1
///青蛙B的跳跃长度是x2 + x*L2
///(x1+x*L1)-(x2+x*L2) = y*L ==> (L2-L1)*x+(L)*y = x1-x2; cin >> x1 >> x2 >> L1 >> L2 >> L; LL a = L2-L1, b = L, c = x1-x2, x0, y0;
LL d = ExGcd(a, b, x0, y0); if(c % d)
{///条件不符合
printf("Impossible\n");
return ;
} x0 = x0 * (c/d), y0 = y0 * (c/d);
a /= d, b /= d; LL x = x0+x0/(-b)*b; if(x < )x += b; cout << x <<endl; return ;
}
青蛙的约会 - poj 1061(扩展欧几里得)的更多相关文章
- poj 1061(扩展欧几里得定理求不定方程)
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特 ...
- poj 1061 扩展欧几里得解同余方程(求最小非负整数解)
题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...
- 青蛙的约会(exgcd/扩展欧几里得)
题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清 ...
- POJ 1061 扩展欧几里得
#include<stdio.h> #include<string.h> typedef long long ll; void gcd(ll a,ll b,ll& d, ...
- AC日记——青蛙的约会 poj 1061
青蛙的约会 POJ - 1061 思路: 扩展欧几里得: 设青蛙们要跳k步,我们可以得出式子 m*k+a≡n*k+b(mod l) 式子变形得到 m*k+a-n*k-b=t*l (m-n)*k-t ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- poj 2142 扩展欧几里得解ax+by=c
原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...
- 青蛙的约会 poj 1061
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 86640 Accepted: 15232 Descripti ...
- C - 青蛙的约会 POJ - 1061 (扩展欧几里得)
题目链接:https://cn.vjudge.net/contest/276376#problem/C 题目大意:中文题目. 具体思路:扩展gcd,具体证明过程看图片(就这麽个题我搞了一天,,,). ...
随机推荐
- 为什么每个浏览器都有Mozilla
你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样? Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ...
- Win32中GDI+应用(五)--GDI与GDI+编程模型的区别
在GDI里面,你要想开始自己的绘图工作,必须先获取一个device context handle,然后把这个handle作为绘图复方法的一个参数,才能完成任务.同时,device context ha ...
- C++资源之不完全导引 (转载)
C++资源之不完全导引(完整版)- - 这文章太强了,我一定要转载,否则对不起观众,对不起自己.(liigo) 发信人: NULLNULL (空空), 信区: VC标 题: C++资源之不完全导引( ...
- USACO 2.2 Subset Sums 集合(subset)
Description 对于从1到N的连续整集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等的: {3} ...
- jquery 核心
1.jquery核心函数 1.1 jQuery([selector,[context]]); $("#id"),$(document.body),$(" ...
- PHP实现简易的模板引擎
PHP实现简易的模板引擎 1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Mode ...
- 利用def生成dll文件
DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明:另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被 ...
- PinchArea QML Type
PinchArea类型是在QtQuick 1.1中添加进去的.PinchArea是一个不可见的对象,常用在与一个可见对象连接在一起,为对应的可见对象提供手势操作.enabled属性被用来去设置绑定对象 ...
- f.lux亮度自动改变
笔记本在底光光镜下很刺眼,使用win7自带的亮度调节有的比较坑爹,我的Win+X里面没有亮度-! 使用f.lux可以自动根据时间调整光亮这一点很给力. 你,可以拥有.
- 关于PowerDesigner
1. PowerDesigner将所有的小写改为大写:Tools->Model Option->左侧菜单中“Naming conversion”->Column->Code – ...