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 ...
随机推荐
- SPRING-BOOT系列之Spring4快速入门
上节 : spring boot简介 接着上章节的spring boot简介,我们会发现boot是基于spring的,其中最重要的就是spring容器了.那么本章着重介绍spring容器装配自定义be ...
- oozie.log报提示:org.apache.oozie.service.ServiceException: E0104错误 An Admin needs to install the sharelib with oozie-setup.sh and issue the 'oozie admin' CLI command to update sharelib
不多说,直接上干货! 问题详情 关于怎么启动oozie,我这里不多赘述. Oozie的详细启动步骤(CDH版本的3节点集群) 然后,我在查看 [hadoop@bigdatamaster logs]$ ...
- AJPFX:实现递归统计文件夹的总大小
class Statistical { public static void main(String[] args) { Scanner sc = new Scanner(Syst ...
- pageHelper分页插件失效问题
在bootstrap中引用pageHelper进行页面分页<dependency><groupId>com.github.pagehelper</groupId>& ...
- 5款好用的mysql客户端
1. EMS SQL Manager for MySQL 是一款高性能MySQL数据库服务器系统的管理和开发工具.它支持从MySQL 3.23到6.0的任一版本,并支持最新版本的MySQL的特点,包括 ...
- Quartz使用二 通过属性传递数据
上一篇介绍了通过context.getJobDetail().getJobDataMap()方式获取传递的数据,其实可以通过定义属性来传递参数 package org.tonny.quartz; im ...
- 我来解数独(附delphi源码)
前段时间看到“69岁农民3天破解世界最难数独游戏”,然后在看了那个号称世界最难的数独题目之后,就打算抽空编程解决.今晚抽出一个晚上,大约四五个小时的时间,中间还间歇在clash of clans上造兵 ...
- codevs 2761 脏话过滤
时间限制: 1 s 空间限制: 8000 KB 题目等级 : 白银 Silver 题目描述 Description 某论坛希望打造文明论坛,对于每个帖子需要将脏话换成*输出. 脏话有38,25 ...
- Git 版本控制系统的基本使用、常用操作
以Ubuntu16.04操作系统为例(其他系统类似),主要记录常用的.基本操作: 0. 安装Git 分散型版本控制系统(CVS): sudo apt-get install git 1. 初始化本地配 ...
- Linux/Windows 实用工具简记
以下只是开发中可能用的比较多的工具,另外还有其他很多未曾提及的实用工具.Linux篇: 1.链接过程的调试:主要用于查看构建过程:如链接时加载的动态库以及运行时加载动态库过程的调试 支持LD_DEBU ...