题目链接:点击查看

题目大意:两只青蛙在一个单向循环数轴上跳动,给出初始位置和每秒跳动的距离以及数轴长度,问是否可以相遇,若能相遇求出最小时间

题目分析:自从第一次接触扩展欧几里得以来已经有半年时间了,期间遇到这个题目三次,每一次都是照着网上的题解苟且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不一定是正数,所以我们分类讨论一下即可:

  1. n-m>0

    1. A=n-m
    2. B=L
    3. C=x-y
  2. n-m<0
    1. ​​​​​​​A=m-n
    2. B=L
    3. 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 青蛙的约会(扩展欧几里得)相关推荐

  1. POJ 1061 青蛙的约会 (扩展欧几里得)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 97673   Accepted: 18409 Descripti ...

  2. JZYZOJ1371 青蛙的约会 扩展欧几里得 GTMD数论

    http://172.20.6.3/Problem_Show.asp?id=1371 题意是两个青蛙朝同一个方向跳 http://www.cnblogs.com/jackge/archive/2013 ...

  3. POJ 1061 青蛙的约会(扩展GCD求模线性方程)

    题目地址:POJ 1061 扩展GCD好难懂..看了半天,终于把证明什么的都看明白了..推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> # ...

  4. POJ 1061青蛙的约会题解

    POJ 1061青蛙的约会题解 网上似乎有不少此题的解法.我这个post和其他人的相比主要时想说下面几点. 1. 给出一个试图不死记硬背公式的思路; 2. 谈谈暴力解为什么看起来这么诱人,却无法通过; ...

  5. poj 1061青蛙的约会

    青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...

  6. poj 1061 青蛙的约会

    一只青蛙1一开始在x位置,另一只青蛙2在y位置.青蛙1每次跳m米,青蛙2每次跳n米,并且都是向右跳的.地球经线长度是L,然后地球是圆的,也就是说,对L取模:问多少次后它们能跳到一起.如果它们永远不能相 ...

  7. POJ 1061 青蛙的约会(扩展欧几里得)

                                                                   青蛙的约会 Time Limit: 1000MS   Memory Lim ...

  8. 数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)

    青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...

  9. 同余方程 ax≡1(mod b) POJ 1061 青蛙的约会

    题目:求 ax%b=c ax\%b=c最小正整数x解,题目中的 c c=1. 先感谢两位大犇ngncmh和笑巧. 对于一般的问题,我们通常有两种做法: 1)1) Baby Step Giant Ste ...

最新文章

  1. 性能超越GPU、FPGA,华人学者提出软件算法架构加速AI实时化
  2. 解析卷积的高速计算中的细节,一步步代码带你飞
  3. 数组中只出现一次的数字
  4. [笔记]Linux内核学习之旅--软中断与tasklet
  5. 使用 SCons 代替 Makefile 快速构建应用程序
  6. java jps监控_记录java虚拟机性能监控工具(jps与jstat)的使用
  7. PAIP.利用SyncML协议来同步备份手机短信联系人.txt
  8. echarts数据包坐标拾取工具
  9. eova、easyui及普通DOM表单元素操作
  10. PR视频剪辑教学,基础工具学习教程「附软件」码住。
  11. 工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型
  12. 计算机控制plc应用论文,PLC自动控制系系统在变频器中的运用
  13. 在微型计算机中svga的含义是什么,在微机中,VGA的含义是什么?
  14. 启动日志中出现The APR based Apache Tomcat Native library which allows optimal performance in production env
  15. introduce page
  16. 无需电脑的多平台推流编码器
  17. 怎么理解anchor?
  18. Webuploader教程(一)------简单实用上传功能
  19. JTAG与SWD的接口连接关系简介
  20. (附源码)基于ssm技术的校自助阅览室的设计与实现 毕业设计242326

热门文章

  1. SpringSecurity权限控制之异常处理方式三
  2. 通过JSR250规范 提供的注解@PostConstruct 和@ProDestory标注的方法
  3. Spring简介-Spring的优势
  4. MybatisPlus入门案例
  5. 模板方法源码解析(jdk+servlet+mybatis)
  6. jvm_虚拟机组成部分概述
  7. 【小题目】写JAVA程序时可以创建一个名为123.java的源文件吗
  8. HID接口设备-固件要求
  9. Linux--网络编程
  10. 关于static变量的定义及性质的深层介绍