【题解】青蛙的约会

算是笔者的数学第一题吧……

题目链接

解:

显然我们已知的条件有:青蛙A和青蛙B的初始坐标,跳动速度以及纬线长度。想要相遇,显然要使得跳动长度是L的整数倍。

那么,我们设它们跳了T步,则有:

X+mT-(Y+nT)=LP,P为正整数。

移项整理,得:

X+mT-Y-nT=LP

X-Y+(m-n)T=LP

X-Y+(m-n)T-LP=0

提出负号得:

(n-m)T+LP=X-Y

显然套用不定方程基本形式:

Ax+By=C,有解当且仅当GCD(A,B)|C.

我们可以套用Exgcd求解,求出一组解,通过这组解求出最小解。

设求出的一组解为W,则

一组特殊解为:J=W*(X-Y)/d,  d=GCD(m-n,L).

通解为:J=W*(X-Y)/d+k(L/d).

最小解为:Ans=(J%(L/d)+(L/d))%(L/d),  J=W*(X-Y)/d.

问题得解。我们求特殊解即可。注意判定无解情况:

1.同余定理得:当X-Y%GCD(m-n,L)不等于0时,无解;

2.当m=n时,显然它们没有速度差,追击问题不成立。

代码:

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
LL n,m,l,x,y;
inline void swap(LL &a,LL &b){a^=b^=a^=b;}
inline void Exgcd(LL a,LL b,LL&d,LL &x,LL &y){
    if(!b){d=a;x=1;y=0;}
    else{
        Exgcd(b,a%b,d,x,y);
        LL t=x;x=y;y=t-(a/b)*y;
    }
}
int main(){
    LL a,b,d;
    scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
    if(n<m)swap(n,m),swap(x,y);
    Exgcd(n-m,l,d,a,b);
    if(n==m||(x-y)%d!=0)printf("Impossible\n");
    else printf("%lld\n",(a*(x-y)/d%(l/d)+(l/d))%(l/d));
    return 0;
}

原文地址:https://www.cnblogs.com/h-lka/p/11215513.html

时间: 2024-10-08 08:35:31

【题解】青蛙的约会的相关文章

题解 P1516 【青蛙的约会】

题目链接 Solution 青蛙的约会 题目大意:求解不定方程\(ax+by=c\) 分析:我们可以把原来的同余式子写成一个不定方程,这部分基本操作不讲,主要讲方程求解.看到不定方程我们就想到\(exgcd\)对吧? 但是\(exgcd\)只能适用于求解\(ax+by=g\),其中\(g=gcd(a,b)\)的情况 我们设\(exgcd\)求出的一组特解是\((x_0,y_0)\),显然对于方程\(ax+by=c\)的一组解就是\((x_oc/g,y_0c/g)\)对吧?如果\(g \nmid

1477: 青蛙的约会

1477: 青蛙的约会 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 261  Solved: 164[Submit][Status][Discuss] Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某

青蛙的约会(裸扩展欧几里德)

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

解题报告 之 POJ1061 青蛙的约会

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

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

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

POJ1061——青蛙的约会(扩展欧几里德)

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

bzoj1477 青蛙的约会

1477: 青蛙的约会 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 712  Solved: 416[Submit][Status][Discuss] Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某

POJ 1061 青蛙的约会

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

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

青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1061 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很

青蛙的约会(POJ 1061 同余方程)

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