POJ - 1061 青蛙的约会(扩展欧几里得)
题目链接:点击查看
题目大意:两只青蛙在一个单向循环数轴上跳动,给出初始位置和每秒跳动的距离以及数轴长度,问是否可以相遇,若能相遇求出最小时间
题目分析:自从第一次接触扩展欧几里得以来已经有半年时间了,期间遇到这个题目三次,每一次都是照着网上的题解苟且A掉的,前两天去了一次数论的集训,瞬间就豁然开朗,终于明白了扩展欧几里得的正确用法,并且第一次自己完完整整的解决掉了这个模板题。。我太菜了。。直接进入正题:
首先根据题意,我们可以假设两只青蛙是可以相遇的,那么就可以表示成下面的公式:(设t为第t秒相遇)
(x+t*m)%L=(y+t*n)%L
根据同余公式可以相加减,我们进行移项,得到两种情况:
(x-y)%L=t*(n-m)%L和(y-x)%L=t*(m-n)%L
根据同余公式,我们可以写成下面的两种等式:
t*(n-m)+k*L=(x-y)和t*(m-n)+k*L=(y-x)
到了这里我们就可以与扩展欧几里得的公式一一对应上了:
A*x+B*y=C
接下来我们只需要套入模板求出t即可,这里有一点需要注意的,就是扩展欧几里得只能处理正数,但n-m不一定是正数,所以我们分类讨论一下即可:
- n-m>0
- A=n-m
- B=L
- C=x-y
- n-m<0
- A=m-n
- B=L
- C=y-x
最后套公式就好了,上代码:
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;LL ex_gcd(LL a,LL b,LL &x,LL &y)
{if(b==0){x=1;y=0;return a;}LL ans=ex_gcd(b,a%b,y,x);y-=a/b*x;return ans;
}int main()
{
// freopen("input.txt","r",stdin);LL x,y,m,n,L;while(scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&L)!=EOF){LL X,Y;int A,B,C;if(m-n>0){A=m-n;B=L;C=y-x;}else{A=n-m;B=L;C=x-y;}LL d=ex_gcd(A,B,X,Y);if(C%d!=0){printf("Impossible\n");continue;}B/=d;X=X*C/d;X=(X%B+B)%B;printf("%lld\n",X);}return 0;
}
POJ - 1061 青蛙的约会(扩展欧几里得)相关推荐
- POJ 1061 青蛙的约会 (扩展欧几里得)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 97673 Accepted: 18409 Descripti ...
- JZYZOJ1371 青蛙的约会 扩展欧几里得 GTMD数论
http://172.20.6.3/Problem_Show.asp?id=1371 题意是两个青蛙朝同一个方向跳 http://www.cnblogs.com/jackge/archive/2013 ...
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
题目地址:POJ 1061 扩展GCD好难懂..看了半天,终于把证明什么的都看明白了..推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> # ...
- POJ 1061青蛙的约会题解
POJ 1061青蛙的约会题解 网上似乎有不少此题的解法.我这个post和其他人的相比主要时想说下面几点. 1. 给出一个试图不死记硬背公式的思路; 2. 谈谈暴力解为什么看起来这么诱人,却无法通过; ...
- poj 1061青蛙的约会
青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...
- poj 1061 青蛙的约会
一只青蛙1一开始在x位置,另一只青蛙2在y位置.青蛙1每次跳m米,青蛙2每次跳n米,并且都是向右跳的.地球经线长度是L,然后地球是圆的,也就是说,对L取模:问多少次后它们能跳到一起.如果它们永远不能相 ...
- POJ 1061 青蛙的约会(扩展欧几里得)
青蛙的约会 Time Limit: 1000MS Memory Lim ...
- 数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)
青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...
- 同余方程 ax≡1(mod b) POJ 1061 青蛙的约会
题目:求 ax%b=c ax\%b=c最小正整数x解,题目中的 c c=1. 先感谢两位大犇ngncmh和笑巧. 对于一般的问题,我们通常有两种做法: 1)1) Baby Step Giant Ste ...
最新文章
- 性能超越GPU、FPGA,华人学者提出软件算法架构加速AI实时化
- 解析卷积的高速计算中的细节,一步步代码带你飞
- 数组中只出现一次的数字
- [笔记]Linux内核学习之旅--软中断与tasklet
- 使用 SCons 代替 Makefile 快速构建应用程序
- java jps监控_记录java虚拟机性能监控工具(jps与jstat)的使用
- PAIP.利用SyncML协议来同步备份手机短信联系人.txt
- echarts数据包坐标拾取工具
- eova、easyui及普通DOM表单元素操作
- PR视频剪辑教学,基础工具学习教程「附软件」码住。
- 工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型
- 计算机控制plc应用论文,PLC自动控制系系统在变频器中的运用
- 在微型计算机中svga的含义是什么,在微机中,VGA的含义是什么?
- 启动日志中出现The APR based Apache Tomcat Native library which allows optimal performance in production env
- introduce page
- 无需电脑的多平台推流编码器
- 怎么理解anchor?
- Webuploader教程(一)------简单实用上传功能
- JTAG与SWD的接口连接关系简介
- (附源码)基于ssm技术的校自助阅览室的设计与实现 毕业设计242326