POJ1061-青蛙的约会---扩展欧几里德算法求最小整数解
扩展欧几里得算法模板
#include <cstdio>
#include <cstring>
#define ll long long using namespace std; ll extend_gcd(ll a, ll b, ll &x, ll &y)
{
if(b == )
{
x = , y = ;
return a;
}
else
{
ll r = extend_gcd(b, a%b, y, x);
y -= x*(a/b);
return r;
}
}
1.对于形如a*x0 + b*y0 = n的不定方程为了求解x0和y0,可以通过扩展欧几里得先求出满足a*x + b*y = gcd(a, b)的x和y。
2.容易得到,若(x-y)%gcd(a,b)==0,则该不定方程有整数解,否则无符合条件的整数解。
3.得到x和y后,可以通过x0 = x*n / gcd(a, b)这个x0相当关键,求出x0.
4.在实际问题当中,我们需要的往往是最小整数解,我们可以通过下面的方法求出最小整数解:
令t = b/gcd(a, b),x是方程a*x + b*y = n的一个特解,则xmin = (x % t + t) % t
青蛙的约会
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 113227 | Accepted: 23091 |
Description
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。
Input
Output
Sample Input
1 2 3 4 5
Sample Output
4 分析:
#include "cstdio"
#include "iostream"
using namespace std;
#define LL long long
LL extgcd(LL a,LL b,LL&x,LL&y)///模板
{
if(b==){
x=;y=;
return a;
}
LL ans=extgcd(b,a%b,y,x);
y-=a/b*x;
return ans;
} int main()
{
LL n,m,t,l,x,y,p;
while(~scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l))
{
LL ans=extgcd(n-m,l,t,p);
if((x-y)%ans){///1.
printf("Impossible\n");
}
else
{
///求最小整数解的算法
t=(x-y)/ans*t;///首先令x为一个特解 2.
LL temp=(l/ans);
t=(t%temp+temp)%temp;///再根据公式计算 3.
printf("%lld\n",t);
}
}
}
总结:对于此类题,
我们需要做的是,1.看懂公式熟记公式
2.吸收这份来自数学的伟大力量
POJ1061-青蛙的约会---扩展欧几里德算法求最小整数解的更多相关文章
- POJ1061青蛙的约会(扩展欧几里德算法)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 102239 Accepted: 19781 Descript ...
- POJ-1061青蛙的约会,扩展欧几里德求逆元!
青蛙的约会 以前不止一次看过这个题,但都没有去补..好吧,现在慢慢来做. 友情提示 ...
- poj1061 青蛙的约会 扩展欧几里德的应用
这个题解得改一下,开始接触数论,这道题目一开始是看了别人的思路做的,后来我又继续以这种方法去做题,发现很困难,学长告诉我先看书,把各种词的定义看懂了,再好好学习,我做了几道朴素的欧几里德,尽管是小学生 ...
- POJ1061——青蛙的约会(扩展欧几里德)
青蛙的约会 Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
- 青蛙的约会 (ax+by=c求最小整数解)【拓展欧几里得】
青蛙的约会(点击跳转) 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住 ...
- poj1061青蛙的约会 (扩展欧几里德)
Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...
- POJ - 1061 扩展欧几里德算法+求最小正整数解
//#pragma comment(linker, "/STACK:1024000000,1024000000") //#pragma GCC optimize(2) #inclu ...
- POJ1061 青蛙的约会 —— 扩展gcd
题目链接:https://vjudge.net/problem/POJ-1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- 解题报告:poj1061 青蛙的约会 - 扩展欧几里得算法
青蛙的约会 writer:pprp Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 119716 Accepted: 25238 ...
随机推荐
- laravel5.5jwt-auth的使用
laravel5.5 + jwt-auth:dev-develop 安装扩展 composer require tymon/jwt-auth:dev-develop --prefer-source 添 ...
- js数字格式化千分位格式
带小数点的 var a = 8462948.2453; console.log(a.toLocaleString()) //8,462,948.245 不带小数点的 num.toString().re ...
- Qt Qwdget 汽车仪表知识点拆解8 淡入效果
先贴上效果图,注意,没有写逻辑,都是乱动的 看下面的开始,开始的时候有一个带入的效果,这里有一个坑, 网上大部分都是调用下面这个函数 setWindowOpacity(); 但是,你会发现,在你的子窗 ...
- 《python核心编程第二版》第7章习题
7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答:dict1.update(dict2) 7–2. 字典的键.我们知道字典的值可以是任意的Python 对象,那字典的键又如何呢?请试 ...
- nonebot 源码阅读笔记
前言 nonebot 是一个 QQ 消息机器人框架,它的一些实现机制,值得参考. nonebot NoneBot 初始化(配置加载) 阅读 nonebot 文档,第一个示例如下: import non ...
- HDU 4441 Queue Sequence(优先队列+Treap树)(2012 Asia Tianjin Regional Contest)
Problem Description There's a queue obeying the first in first out rule. Each time you can either pu ...
- poj1200 字符串hash 滚动哈希初探
假如要判断字符串A“AABA”是否是字符串B“AABAACAADAABAABA”的子串 最朴素的算法是枚举B的所有长度为4的子串,然后逐个与A进行对比,这样的时间复杂度是O(mn),m为A的长度,n为 ...
- Vue2.0 新手完全填坑攻略——从环境搭建到发布(转载)
强力推荐,详情请点击此链接http://www.jianshu.com/p/5ba253651c3b
- Winform常用知识总结
Label中的文字自动换行 设置MaximumSize的width为正确的值,设置height为0,设置AutoSize为true. 绘制线条 放置一个Panel,设置size的高度为1,设置Bord ...
- oracle约束条件
约束条件有5种 非空约束(not null):约束该列一定要输入值 主关键字约束(primary key):用来唯一标示表中的一个列,一个表中的主键约束只能有一个 外关键字约束(foreign key ...