GDUT_寒假训练题解报告_数论专题_个人题解报告——题目:F - 青蛙的约会 【POJ - 1061】【数论(EXGCD,最小正整数解)】

北大POJ题目---青蛙的约会 今天在北大POJ上做到一道题——青蛙的约会,连续研究了数个小时,提交了共有50多次,每次都是以wrong anwser或是Time Limit Exceeded被打了回来。后来没吃晚饭,当看到最后一次显示“Accepted”时,内心的焦躁瞬间舒展开来了。    题目原文:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直 阅读详情

原题是POJ-1061;
题目:

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。

Input

输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。

Output

输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"

Sample Input

1 2 3 4 5

Sample Output

4

我们设跳跃次数为t(time),然后跳了k圈,也就是:
(x+mt) - (y+nt)=kl
这样的式子,俩未知数,可以化成ax+by=c的形式:
(n-m) * t + k
l = x-y;
这里还要注意一个问题,就是正负问题,式子ab一定要是全都正数,这样的话正负又会反馈给xy这两个解。

所以要这样搞:

LL a=n-m;
	LL b=l;
	LL c=x-y;
	LL k,t;
	if(a<0)
	{
		a=-a;
		c=-c;
	}

这样做的目的是让a是一个正值,刚才说了ab都要是正数,那为什么c不考虑而直接调转呢,这是因为c起到的作用在exgcd函数中是不起作用的:

LL exgcd(LL a,LL b,LL &t,LL &k)
{
	int d=a;
	if(b==0)
	{
		t=1;
		k=0;
	}
	else
	{
		d=exgcd(b,a%b,k,t);
		k-=(a/b)*t;
	}
	return d;
}

这个函数求的是ax+by=gcd(a,b)的特解 t和 k,但是并没有去考虑c。
首先,我们得到的tk是对于gcd(a,b)而言的,现在要对c而言怎么办呢?

第一,判断c是gcd的整数倍,这样才能得出有解
第二我们就可以让
t*=c/gcd;
k*=c/gcd;
来达到tk成倍数增长与c相适应。

接下来我们可以用用c来求通解和特解;
通解:x+b/gcd*n是x的通解(相当于x每次可以增减:b/gcd的整数倍)
y同理。

最小正整数解:
当求出来的x是正数,直接x%=b/gcd;
如果是负数,就要x=x%b/gcd+b/gcd;

完整代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <climits>
#include <queue>
#include <stack>
#include <map>
//鬼畜头文件
using namespace std;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;
typedef unsigned long long ULL;
typedef long long LL;
//鬼畜define
LL x,y,n,m,l;
LL exgcd(LL a,LL b,LL &t,LL &k)
{
	int d=a;
	if(b==0)
	{
		t=1;
		k=0;
	}
	else
	{
		d=exgcd(b,a%b,k,t);
		k-=(a/b)*t;
	}
	return d;
}
int main()
{
	scanf("%lld %lld %lld %lld %lld",&x,&y,&m,&n,&l);
	LL a=n-m;
	LL b=l;
	LL c=x-y;
	LL k,t;
	if(a<0)
	{
		a=-a;
		c=-c;
	}
	LL gcd=exgcd(a,b,t,k);
	if(c%gcd!=0)printf("Impossible\n");
	else
	{
		t=t*c/gcd;
		if(t>=0)t%=b/gcd;
		else t=t%b/gcd+b/gcd;

		printf("%lld\n",t);
	}

	return 0;
}
poj 1061青蛙的约会 青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 90083   Accepted: 16257 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面 阅读详情

相关推荐

题解: poj 1061 nefu 84(拓展欧几里得)

POJ1061 Language:Default青蛙的约会 Time Limit: 1000MSMemory Limit: 10000KTotal Submissions: 105002Accepted: 20595Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一

sun897949163的博客 6302

exgcd之求解最小正整数解

套用exgcd模板求得的是一组特殊解,但其实这一个方程式是有一个解系,在很多问题中是要你求得最小整数解,下面我们就解决这个问题,在阅读过很多博客加上自己的理解总结了两种方法(其实差距不大) 1、a*x+b*y=gcd(a,b) void exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0;

扬帆起航 1万+

关于扩展欧几里德算法的报告

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们 很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为 止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也 没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某 个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上, 不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序 来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点, 由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设 青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B 一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你 求出它们跳了几次以后才会碰面。

exgcd求解最小正整数解

将质因子分为A,B两个集合。存在正整数x,y,使得 t+1 = ax, t = by。则有ax-by=1.可以考虑到exgcd求出最小正整数解x,则t = ax-1,每次循环更新最小答案ans。题意:a数组中所有的数的最小公倍数为L。求出最小的数t,使得t *(t+1) 是2 * L的倍数。将指数列表中最前面几个质数相乘,可以发现乘到第十六个质数后,结果已经超过了1e18。故可以暴力枚举 L 的每个质因子是属于 t 还是 t + 1(用dfs或者位运算)exgcd求解最小正整数解模板。

XihuDacuyu的博客 564

GD32F303驱动WS2812B灯带:用TIMER+PWM+DMA解放CPU,实现流畅灯效(附完整代码)

本文详细介绍了基于GD32F303的TIMER+PWM+DMA全自动控制方案,用于高效驱动WS2812B灯带。通过硬件外设协同工作,该方案不仅解放了CPU资源,还能实现复杂的灯光效果,如渐变、流水等。文章提供了完整的代码实现和性能优化技巧,适合嵌入式开发者参考。

weixin_42561143的博客 380

Proteus一体化安装STC15库添加

Proteus一体化安装与STC15库添加指南 本文详细介绍了Proteus 8.9 SP2专业版的一体化安装流程和STC15系列单片机库文件的添加方法。安装过程简单快捷,无需破解,稳定性好。通过将两个库文件(Lib和LIB)复制到Proteus安装目录的DATA/LIBRARY文件夹中,即可实现STC15W4K32S4芯片的仿真功能。文中还提供了新建工程和器件放置的步骤说明,特别指出STC15W4K32S4芯片可兼容仿真其他STC15系列芯片,并附带下载链接获取资源。该教程适用于电子设计初学者和开发者。

#法外狂徒张三的博客 4万+

青蛙的约会—POJ1061

题目: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线 上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的 特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到 对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两...

qq_44859533的博客 1156

Isograph Reliability Workbench 14实战:从零构建故障树分析模型

本文以“马达不转”为例,手把手教你使用Isograph Reliability Workbench 14从零构建故障树分析模型。内容涵盖创建工程、定义顶事件、添加逻辑门与基础事件等核心步骤,并介绍了模型检查与定性定量分析,帮助你系统掌握这一强大的可靠性工程工具。

weixin_29309213的博客 364

扩展欧几里得求通解、最小正整数解-个人向梳理

首先确定这个方程是否存在整数解,刚才在求解的过程中等式的右边是。扩展欧几里得算法是用来求解一类特定的不定方程的,形如。,一直回溯到开始的状态,就可以得到原始的一组特解。,如果不满足这个条件,那么方程就没有正整数解。当扩展欧几里得在到达递归边界的时候,此时。得到一组特解后特解,我们开始着手于寻找。但是此时我们得到的依旧不是通解,因为。,此时我们发现式子有一个解,即。是函数最最开始输入的时候的值。是到达递归边界时候的值,而。,所有我们求出的特解是满足。有正整数解,那么原来的。的系数合并,我们得到。

m0_62676987的博客 979

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 398

全志 camera: 4路AHD摄像头转MIPI

TP2815 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 MIPI 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 9097

青蛙的约会(POJ 1061 扩展欧几里德算法)

POJ 1061 青蛙的约会 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远...

Psychosocial的博客 1725

对接金蝶云星空调用即时库存信息查询API(附JAVA实现)

这篇文章教你如何对接金蝶API并且使用JAVA调用金蝶云星空的即时库存查询API

实用的博客 2609

exgcd求解同余方程的最小正整数解 poj1061 poj2115

这两题都是求解同余方程,并要求出最小正整数解的 对于给定的Ax=B(mod C)要求x的最小正整数解 首先这个式子可转化为 Ax+Cy=B,那么先用exgcd求出Ax+Cy=gcd(A,C)的解x 然后这个式子的一个特解就是 (B/gcd(A,C))* x 要注意如果gcd(A,C)无法整除B,那么这个式子无解 然后是求出最小整数解 Ax+Cy=B方程的通解是x+k*C/gcd(...

weixin_30335575的博客 897

[Dify实战] OA 公文排版助手:自动格式化、编号、生成摘要-带配套资源

摘要: Dify 公文排版助手通过自动化解决公文处理中的格式混乱、编号错漏等问题。支持标题层级自动编号、摘要生成、要素补全等功能,输出标准化Markdown格式。核心流程包括输入原文、智能识别、自动排版与要素输出,适用于通知、纪要等场景。实施需统一模板规则,规范输入格式,并通过试跑优化纠错率与处理效率。关键价值在于减少人工返工,提升排版一致性,未来可对接OA系统实现全流程自动化。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 472

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

青蛙的约会 数论 拓展欧几里德

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,...

博客标题不能为空我也没办法 253

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

青蛙的约会(POJ-1061)

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的...

Alex_McAvoy的博客 1810

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

P1516 青蛙的约会

题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐...

叶上初阳_285557的博客 251

寒假集训_专题四题解_F - 青蛙的约会

题目 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的...

m0_46185124的博客 253

青蛙的约会

题目分析:   设时间为t,则两个青蛙的位置分别为(x+mt)mod L、(y+nt)mod L,相遇即是(x+mt)%L=(y+nt)%L,即(m-n)*t+k*L=y-x。 OK,现在已经符合ax+by=c的方程了,设a=m-n,b=L,c=y-x,然后套用模板求出特解t的值,注意t>0,所以要用通解公式得出最小正整数(为啥刚开始我就没想到这一点呢)。...

weixin_30632899的博客 318

POJ 2142 The Balance [不定方程和最小的正整数解]【数论】

题目链接:http://poj.org/problem?id=2142——————————————–.The Balance Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5998 Accepted: 2610 DescriptionMs. Iyo Kiffa-Australis has a balanc

Tabris的博客 1945

poj1061 青蛙的约会(扩展欧几里得算法求解同余方程)

                               青蛙的约会 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到...

敲代码的乔帮主 1050

POJ 1061(不定方程的最小正整数解)

青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 108469   Accepted: 21745 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰

大宝哥spring 3626

poj 1601 青蛙的约会 扩展欧几里得定理应用

青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 86204   Accepted: 15142 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止

必然中的偶然 967
上一篇: 2020牛客寒假算法基础集训营2题解 E题:做计数【数学题,时间复杂度:O( n )】
下一篇: CF:#620场div2题目题解:B - Longest Palindrome
DevourPower
博客等级 码龄7年 52粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值