数论问题(1) : poj 1061
最近,本人发现了一个新网站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的更多相关文章
- (Relax 数论1.6)POJ 1061 青蛙的约会(扩展的欧几里得公式)
/* * POJ_1061.cpp * * Created on: 2013年11月19日 * Author: Administrator */ #include <iostream> # ...
- ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Descr ...
- 扩展欧几里德 POJ 1061
欧几里德的是来求最大公约数的,扩展欧几里德,基于欧几里德实现了一种扩展,是用来在已知a, b求解一组x,y使得ax+by = Gcd(a, b) =d(解一定存在,根据数论中的相关定理,证明是用裴蜀定 ...
- poj 1061 青蛙的约会 拓展欧几里得模板
// poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...
- 数学#扩展欧几里德 POJ 1061&2115&2891
寒假做的题了,先贴那时写的代码. POJ 1061 #include<iostream> #include<cstdio> typedef long long LL; usin ...
- POJ.1061 青蛙的约会 (拓展欧几里得)
POJ.1061 青蛙的约会 (拓展欧几里得) 题意分析 我们设两只小青蛙每只都跳了X次,由于他们相遇,可以得出他们同余,则有: 代码总览 #include <iostream> #inc ...
- poj 1061 青蛙的约会 (扩展欧几里得模板)
青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 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 ...
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
题目地址:POJ 1061 扩展GCD好难懂.. 看了半天.最终把证明什么的都看明确了. .推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> ...
随机推荐
- 详解 IaaS、PaaS和SaaS 以及他们各自的代表公司
——IaaS,PaaS和SaaS 是云计算领域的专业术语,也是云计算的三种服务模式. (1)SaaS:Software as a Service,软件即服务(也称为云应用程序服务) . 云市场中企 ...
- 【mysql报错】MySQL5.7.27报错“[Warning] Using a password on the command line interface can be insecure.”
MySQL5.7.27报错“[Warning] Using a password on the command line interface can be insecure.”在命令行使用密码不安全警 ...
- Ubuntu 限制 指定端口和IP 访问
限制端口和IP的时候 要注意别自己登陆不进去了,要不就惨了. 只允许指定的IP访问服务器的指定端口:22 只允许访问的ip: 192.168.1.1 192.168.1.2 192.168.1.3,禁 ...
- Server2016 IIS安装配置
- 百度站长平台HTTPS认证所遇到的坑
坑1: 百度站长平台https认证失败,提示:请确保您网站的所有链接均支持https访问,且未使用不安全协议(如:SSL2.SSL3等协议). 解决办法: 1. 友情链接检查, 要检查所有的友情链接 ...
- MyBatis面试题集合,90%会遇到这些问题
1.#{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. ...
- jenkins+robotframework邮件发送报告模板
1.Jenkins中配置系统邮件系统管理–系统设置,配置Extended E-mail Notification 2.jenkins 创建一个新项目,项目创建成功,配置邮件
- Docker Desktop for Windows 安装步骤
Docker Desktop for Windows 安装要求 Docker Desktop for Windows需要运行Microsoft Hyper-V.如果需要,Docker Desktop ...
- 6 、 图论—NP 搜索
6.1 最大团 //最大团 //返回最大团大小和一个方案,传入图的大小 n 和邻接阵 mat //mat[i][j]为布尔量 #define MAXN 60 void clique(int n, in ...
- maven 学习---使用Maven模板创建项目
在本教程中,我们将向你展示如何使用mvn archetype:generate从现有的Maven模板列表中生成项目.在Maven 3.3.3,有超过1000+个模板,Maven 团队已经过滤掉一些无用 ...