POJ1061 青蛙的约会 __一维世界的爱情
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。
输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。
输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"
Sample Input:
1 2 3 4 5
Sample Output:
4
题目分析:
  设时间为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,所以要用通解公式得出最小正整数(为啥刚开始我就没想到这一点呢)。最后注意用long long~
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <functional>
#include <vector>
#include <cmath>
#include <string>
#include <stack>
#include <queue>
using namespace std;
long long extend_gcd(long long a,long long b,long long &x,long long &y)
{ if(b==){
x=;y=;
return a;
}else{
long long r=extend_gcd(b,a%b,y,x);
y-=x*(a/b);
return r;
}
}
int main()
{
long long x,y,m,n,L;
long long a,b,c,gcd;
while(scanf("%lld %lld %lld %lld %lld",&x,&y,&m,&n,&L)!=EOF)
{ a=m-n;
b=L;
c=y-x;
if(a<)
{ a=-a;
c=-c;
}
gcd=extend_gcd(a,b,x,y);
if(c%gcd!=)
cout<<"Impossible"<<endl;
else{
x=x*c/gcd;
int t=b/gcd;
if(x>=)
x=x%t;
else
x=x%t+t;
cout<<x<<endl;
}
}
return ;
}
POJ1061 青蛙的约会 __一维世界的爱情的更多相关文章
- POJ1061 青蛙的约会 —— 扩展gcd
		
题目链接:https://vjudge.net/problem/POJ-1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
 - poj1061 青蛙的约会 扩展欧几里德的应用
		
这个题解得改一下,开始接触数论,这道题目一开始是看了别人的思路做的,后来我又继续以这种方法去做题,发现很困难,学长告诉我先看书,把各种词的定义看懂了,再好好学习,我做了几道朴素的欧几里德,尽管是小学生 ...
 - POJ1061青蛙的约会[扩展欧几里得]
		
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 108911 Accepted: 21866 Descript ...
 - POJ1061——青蛙的约会(扩展欧几里德)
		
青蛙的约会 Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
 - POJ1061青蛙的约会(扩展欧几里德算法)
		
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 102239 Accepted: 19781 Descript ...
 - POJ1061 青蛙的约会(扩展欧几里得)
		
题目链接:http://poj.org/problem?id=1061 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
 - 解题报告:poj1061 青蛙的约会 - 扩展欧几里得算法
		
青蛙的约会 writer:pprp Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 119716 Accepted: 25238 ...
 - POJ1061 青蛙的约会 和 LOJ2721 「NOI2018」屠龙勇士
		
青蛙的约会 Language:Default 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 133470 Accep ...
 - POJ-1061青蛙的约会,扩展欧几里德求逆元!
		
青蛙的约会 以前不止一次看过这个题,但都没有去补..好吧,现在慢慢来做. 友情提示 ...
 
随机推荐
- adnroid  启动是没有标题栏
			
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Light.N ...
 - C4-总结
			
呃,很难受的比赛,中途做到口干舌燥还想尿尿//哦,题目,出的很棒,什么都可以做做,什么都做不下来. 怎么说呢?好像也没犯什么错误,除了日常开始手抖了一下...后面状态进入挺快的,而且遗憾?3-2吧,t ...
 - 清北刷题冲刺 11-02 p.m
			
函数最值 #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 usi ...
 - ImportError: /lib64/libc.so.6: version `GLIBC_2.17' 问题解决
			
安装最新的TensorFlow(>=1.10)后,载入TensorFlow时提示Glibc版本过低,需要升级到指定版本. ImportError: /lib64/libc.so.6: versi ...
 - MQ 重复消费如何解决?
			
1. 使用幂等操作 乐观锁:每个数据有一个版本号,和当前版本号相同的时候进行更新 去重表(缓存): 唯一性索引,如果已经存在值了就不行更新 2. 算法 两个链表是否相交? 3.redis 集合相交的 ...
 - Datatable 转换 Dictionary
			
DataTable dt = new DataTable(); dt.Columns.Add("姓名"); dt.Columns.Add("学号"); dt.R ...
 - 解决gap 采用increapment scn 方式 操作。
			
###########1 1.查看备库的scn ⚠️如果控制文件,数据文件,数据文件头部的scn不一致,需要根据日志中的gap的起始sequence# 找到对应的scn col current_sc ...
 - Bonetrousle  HackerRank 数学 + 思维题
			
https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle 给定一个数n,和k个数,1--k这k个,要求 ...
 - C# String.Format方法
			
一.定义String.Format是将指定的 String类型的数据中的每个格式项替换为相应对象的值的文本等效项. 如: (1)string p1 = "Jackie";strin ...
 - Lecture--9 Sorting
			
1/排序算法:冒泡排序bubble sort,插入排序 insertion sort,选择排序 selection sort,快速排序 quick sort,归并排序 merge sort;堆排序 h ...