数论问题(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> ...
随机推荐
- Java连载36-IDE使用
一.主方法注意 每一个类都可以编写一个主方法,但是一般情况下,一个系统只有一个入口,所以主方法一般写一个 二.Myeclipse的使用 1.在workspace中工作区中有一个文件夹.metadata ...
- 明解C语言 中级篇 第一章答案
练习1-1 #include <stdio.h> #include<stdlib.h> int main() { srand(time()); ; printf("您 ...
- Vue.js 源码分析(十八) 指令篇 v-for 指令详解
我们可以用 v-for 指令基于一个数组or对象来渲染一个列表,有五种使用方法,如下: <!DOCTYPE html> <html lang="en"> & ...
- WPF TabItem设置Visibility隐藏Control内容
源自MSDN问题. 思路很简答: TabControl因为只显示TabItem的选择项的control. 所以单独的设置tabitem的control或者使用control的触发器都是不起作用的. 只 ...
- MS14-068域提权漏洞复现
MS14-068域提权漏洞复现 一.漏洞说明 改漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限. 微软官方解释: https://docs.microsoft.com/zh-cn ...
- OpenGL入门1.2:渲染管线简介,画三角形
每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 图形渲染管线简介 在OpenGL的世界里,任何事物是处于3D空间中的,而屏幕和窗口显示的却是2D,所以OpenGL干的事情基本就是 ...
- MySQL问题记录——定义timestamp类型的数据
MySQL问题记录——定义timestamp类型的数据 摘要:本文主要记录了在使用MySQL的过程中定义timestamp类型数据时遇到的问题以及解决方案. 问题重现 在Windows环境下安装MyS ...
- P5124 Teamwork(DP)
题目: P5124 [USACO18DEC]Teamwork 解析: 动态规划,设\(f[i]\)表示到第\(i\)位的最大值,我们枚举i之前的j个位置\((j<k)\),记录一下这\(j+1\ ...
- apache-tomcat-7.0.94在Windows上启动时,控制台黑窗口出现乱码解决
一.问题 二.解决 原因是tomcat日志编码的配置问题. 打开tomcat/conf/logging.properties配置文件. 把编码注释掉或者改为gbk就可以了. 参考:https://bl ...
- E203 译码模块(2)
常用的alu算术运算指令(包括ecall和 ebreak)在regular alu单元处理.regular alu单元为alu单元的一个子单元.regular单元的信息总线共21位,格式如下图所示,其 ...