POJ-1061青蛙的约会,扩展欧几里德求逆元!
以前不止一次看过这个题,但都没有去补。。好吧,现在慢慢来做。
友情提示:先学扩展欧几里德算法在来看效果更好哟!
题意:两只青蛙在一个总长为L的环上,初始位置分别在x,y点,他们同时同向起跳,起跳都是同步的,速度分别是m,n。求跳多少次后才会相遇。
思路:会欧几里德算法的话简单分析一下就是裸模板了。但这题确实花了很多时间。
我们来分析一下这题:我们知道最终位置是在同一点相遇,于是假设跳了s次(两只青蛙都是同时同步跳),那么就有(x+s*m)%L=(y+s*n)%L,即同余式:(x+s*m)=(y+s*n)%L,拆分一下即:s*(m-n)=(y-x)%L,即:s*(n-m)+k*L=x-y;这不就是ax+by=c;我们判断gcd(a,b)是否整除c即可,若不整除则“impossible\n”。反之--------------------我们用扩展欧几里德求出来的x0,y0是符合a*x0+b*y0=gcd(a,b)的,即上式s0*(n-m)+k0*L=gcd(n-m,L);那么原式s*(n-m)+k*L=x-y中的s=s0*((n-m)/gcd(n-m,L))。
理解了以上,代码也就好写了,但小菜还有一点不明白答案s为什么要先取余L再加上L再取余L.....
const int N=1e6+10;
ll e_gcd(ll a,ll b,ll &x,ll &y)
{
if(a==0&&b==0) return -1;
if(!b)
{
x=1,y=0;
return a;
}
ll d=e_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main()
{
ll x,y,n,m,l;
while(~scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l))
{
ll d=x-y;
ll s,t;
ll ans=e_gcd(n-m,l,s,t);
if(d%ans) printf("Impossible\n");
else printf("%I64d\n",(s*(d/ans)%l+l)%l);
}
return 0;
}
POJ-1061青蛙的约会,扩展欧几里德求逆元!的更多相关文章
- 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 青蛙的约会(扩展GCD求模线性方程)
题目地址:POJ 1061 扩展GCD好难懂.. 看了半天.最终把证明什么的都看明确了. .推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> ...
- poj 1061 青蛙的约会 (扩展欧几里得模板)
青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status ...
- Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)
一.Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...
- POJ - 1061 青蛙的约会 扩展欧几里得 + (贝祖公式)最小正整数解
题意: 青蛙 A 和 青蛙 B ,在同一纬度按照相同方向跳跃相同步数,A的起点为X ,每一步距离为m,B的起点为Y,每一步距离为 n,一圈的长度为L,求最小跳跃步数. 思路: 一开始按照追击问题来写, ...
- poj 1061 青蛙的约会(扩展gcd)
题目链接 题意:两只青蛙从数轴正方向跑,给出各自所在位置, 和数轴长度,和各自一次跳跃的步数,问最少多少步能相遇. 分析:(x+m*t) - (y+n*t) = p * L;(t是跳的次数,L是a青蛙 ...
- (Relax 数论1.6)POJ 1061 青蛙的约会(扩展的欧几里得公式)
/* * POJ_1061.cpp * * Created on: 2013年11月19日 * Author: Administrator */ #include <iostream> # ...
- POJ 1061 青蛙的约会 扩展欧几里得
扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...
随机推荐
- [在读]HTML5程序设计(第二版)
去年买的,看了30%不到,之后一直是搁置状态,内容还不错,确确实实纯粹讲H5的.
- CentOS 6.9 --Squid代理服务器
主机名 IP地址 网关 DNS 服务类型 Master eth0:192.168.17.130(VMnet4) eth1:192.168.30.130(NAT) 192.168.30.2 ...
- solr 常见异常
solr4.3本地数据提交异常分析 (2013-06-19 16:03:15) 转载▼ 异常一. Exception in thread "main" java.lang.No ...
- ASP.NET Web API 2 框架揭秘
这不是一本传统意义上的入门书籍 任何 —本书都具有对应的受众群体,所以我不得不将这句话放在最前面,并且希望所有 打算购买此书的读者能够看到.如果你之前对As氵NET W山API(或者AsPNET MⅤ ...
- 【学习笔记】一:JavaScript简介
1.JavaScript简史 1)JavaScript最初的功能只是用来在客户端做简单的输入验证器,减少客户端与服务器端的数据交互(毕竟那个年代网速有限). 2)JavaScript的飞速发展及Net ...
- [Python學習筆記] 利用 Python在Excel 插入註解
用Python 來處理excel 檔 用過了 openpyxl 還有 pyexcel目前覺得除了讀寫如果還要使用另外的功能 (像是讀取格子裡的公式)可以用 xlwings 他的首頁標題 " ...
- SEO 第十章
SEO第十章 本次课目标: 1. 站外优化方案计划 2. 常见的SEO作弊手段(黑帽) 3. 百度站长平台的使用 4. 网站流量提升和转化率提升 一.站外优化方案计划 友情链接 权重相当.行业 ...
- 第一周作业javaee strainmap
- python调用脚本或shell的方式
python调用脚本或shell有下面三种方式: os.system()特点:(1)可以调用脚本.(2)可以判断是否正确执行.(3)满足不了标准输出 && 错误 commands模块特 ...
- (转)Spring的概述
http://blog.csdn.net/yerenyuan_pku/article/details/69663685 Spring的概述 什么是Spring 据度娘所载: Spring是一个开源框架 ...