最近,本人发现了一个新网站poj(不算新)

当然了,上面的资源很好......

就是还没搞清楚它的搜索该怎么弄,如果有大佬能教教我怎么弄,请在下方留言

闲话少说,回归我们的正题

题目转自poj 1061,题目传送门


题目大意:

给你一条线段(头尾相连),给出线段上两点的位置

在给你它们每次移动的距离,让你求出它们在同一个点停下的最短时间


解题思路:

很显然这道题是让你求ax+by=n这个不定方程(a,b已知)

首先,若ax+by=n有整数解,则gcd(a,b)能够整除n

在明确了上面一条之后,我们就要求出ax+by=gcd(a,b)的一组特解(x0,y0)。

那既然这样,我们就要用到数论上的知识了——拓展欧几里得算法

这道题需要用拓欧来解出一组特解

拓欧代码如下:

void exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==)
{
x=,y=;
return ;
}
exgcd(b,a%b,x,y);
ll tmp=x;
x=y;
y=tmp-(a/b)*y;
}

然后我们把式子两边同时除以gcd(a,b)可得:

cx+dy=1(其中c=a/gcd(a,b);d=b/gcd(a,b),很明显c,d互质)

cx+dy=1的通解如下:

  x=x0+dt

  y=y0+ct  t为任意整数

所以,思路就很明了了:

1,拓欧算出特解

2,通过特解算出最小整数解

打个25min应该就应该出来了


AC代码如下:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#define ll long long
using namespace std;
ll x,y,n,m,l;
ll a,b,c,d,ss_x,ss_y;
ll gcd(ll a,ll b)
{
if(b==) return a;
else gcd(b,a%b);
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==)
{
x=,y=;
return ;
}
exgcd(b,a%b,x,y);
ll tmp=x;
x=y;
y=tmp-(a/b)*y;
}
void init()
{
a=b=c=d=ss_x=ss_y=;
}
int main()
{
while(scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l)!=EOF)
{
init();
a=n-m;
b=l;
c=gcd(a,b);
d=x-y;
if(d%c!=) printf("Impossible\n");
else
{
a/=c;
b/=c;
d/=c;
exgcd(a,b,ss_x,ss_y);
ss_x*=d;
ss_x=(ss_x%b+b)%b;
printf("%lld\n",ss_x);
}
}
return ;
}

AC~


特别说明:

接下来,hdu上的题和poj上的题我会交替更新,所以请各位看官不要着急呀~

数论问题(1) : poj 1061的更多相关文章

  1. (Relax 数论1.6)POJ 1061 青蛙的约会(扩展的欧几里得公式)

    /* * POJ_1061.cpp * * Created on: 2013年11月19日 * Author: Administrator */ #include <iostream> # ...

  2. ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德

    POJ 1061 青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu  Descr ...

  3. 扩展欧几里德 POJ 1061

    欧几里德的是来求最大公约数的,扩展欧几里德,基于欧几里德实现了一种扩展,是用来在已知a, b求解一组x,y使得ax+by = Gcd(a, b) =d(解一定存在,根据数论中的相关定理,证明是用裴蜀定 ...

  4. poj 1061 青蛙的约会 拓展欧几里得模板

    // poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...

  5. 数学#扩展欧几里德 POJ 1061&2115&2891

    寒假做的题了,先贴那时写的代码. POJ 1061 #include<iostream> #include<cstdio> typedef long long LL; usin ...

  6. POJ.1061 青蛙的约会 (拓展欧几里得)

    POJ.1061 青蛙的约会 (拓展欧几里得) 题意分析 我们设两只小青蛙每只都跳了X次,由于他们相遇,可以得出他们同余,则有: 代码总览 #include <iostream> #inc ...

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

    青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. AC日记——青蛙的约会 poj 1061

    青蛙的约会 POJ - 1061   思路: 扩展欧几里得: 设青蛙们要跳k步,我们可以得出式子 m*k+a≡n*k+b(mod l) 式子变形得到 m*k+a-n*k-b=t*l (m-n)*k-t ...

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

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

随机推荐

  1. LeetCode 557:反转字符串中的单词 III Reverse Words in a String III

    公众号:爱写bug(ID:icodebugs) 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. Given a string, you need to reve ...

  2. 【Linux命令】Linux命令后面所接选项和参数的区别

    Linux命令后面所接选项和参数的区别 在使用Linux命令时,有时候后面会跟一些"选项"(options)或"参数"(agruments) 命令格式为: #中 ...

  3. jquery ajax怎么使用jsonp跨域访问

    在项目中使用接口的比较多,在客户端跨域访问,jquery中只能使用jquery ajax的jsonp方法. 值得注意的是,jQuery.ajax()只支持get方式的跨域,post的方式是不支持的.& ...

  4. Uboot启动流程分析(一)

    1.前言 Linux系统的启动需要一个bootloader程序,该bootloader程序会先初始化DDR等外设,然后将Linux内核从flash中拷贝到DDR中,最后启动Linux内核,uboot的 ...

  5. 【转载】百度百科:FusionCube超融合

    [转载]百度百科:FusionCube超融合 华为FusionCube融合基础设施一体机(Huawei FusionCube Converged Infrastructure)是华为公司IT产品线云计 ...

  6. 转载一篇文章:LINQ TO SQL 大全

    https://www.cnblogs.com/chenwolong/p/lts.html 最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河 ...

  7. Json序列化与反序列化(对象与Json字符串的转换)--C#

    public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...

  8. .net core 发布到iis问题 HTTP Error 500.30 - ANCM In-Process Start Failure

    1. 没有在Program里配置IIS webBuilder.UseIIS(); 2. StartupProduction 里AutoFac容器注入错误和新版的CORS中间件已经阻止使用允许任意Ori ...

  9. JavaScript Location 对象用法

    Location 对象 Location对象包含有关当前URL的信息.location对象是window对象的一部分,可以通过window.location属性访问. 注意:没有适用于location ...

  10. APS系统生产流转方式和批量算法研究

    01.前言 在经济领域,生产型企业是经济的根基,有了生产型企业生产出的各种产品,才有物流.网上购物和金融融资等活动.对于生产型企业,其制造能力是其核心竞争力.如何提升制造能力一直是生产型企业面临的课题 ...