青蛙的约会 - 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,具体证明过程看图片(就这麽个题我搞了一天,,,). ...
随机推荐
- C#中的面向对象编程
所有的面向对象语言都具有3个基本特征,C#也是不例外的. 封装---把客观事物封装成类,并将类内部的实现隐藏,以保证数据的完整性: 继承---通过继承可以复用父类的对象: 多态---允许将子对象赋值给 ...
- Java基础--Java内存管理与垃圾回收
Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} publ ...
- struts-json
Struts2序列化的属性,该属性在action中必须有对应的getter方法 如果action的属性很多,我们想要从Action返回到调用页面的数据.这个时候配置includeProperties或 ...
- C#中Socket用法,多个聊天和单一聊天。
自己琢磨Socket刚刚几天,所以整理出来和大家共享一下.废话少说直接进入正题. 在C#中提供了两种网络服务,一种是Socket类,另一种是TcpListener(服务器),TcpClient(客户端 ...
- memcached在linux安装
服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz另外,Memcache用到了lib ...
- C#中的泛型-1
在软件这个行业,做的越久,往往会觉得很多技术问题最终会偏向数据结构和算法. 记得曾经大学的一堂课上,老师讲了一个关于冒泡排序的算法,下面是课本上的标准实现. public class Sort { p ...
- java特点
简单: Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用.另一方面,Java丢弃了C++中很少使用的.很难理解的.令人迷惑的那些特性,如操作符重载.多继承.自动的强制类型 ...
- 【HDOJ】4902 Nice boat
区间线段树.题目还不错. /* */ #include <iostream> #include <string> #include <map> #include & ...
- bzoj1306
非常好的一道搜索题首先没有别的好办法就只能搜,基于对称性我只要搜对角线上半部分即可然后有些惯用的剪枝啦什么的,具体见程序然后代码很短,然后TLE了(但好像也有人过了)然后就不知道怎么优化了,看到CLJ ...
- -_-#【Markdown】
nswbmw / N-blog 第2章 使用 Markdown Markdown 语法说明 (简体中文版)Markdown: Basics (快速入门) 这里示范了一些 Markdown 的语法, 请 ...