OpenJ_Bailian 1061

http://acm.hust.edu.cn/vjudge/contest/125004#problem/C

分析:

不可能的情况:(1)两只青蛙起始位置不同,但跳的步数一样;(2)当两只青蛙起始位置不同,跳的步数不一样,那么当他们重新再各自跳回自己起始位置之前,他们没有见面的话,那么他们肯定不会再见面(也就是构成了一个循环了)

可能的情况:(1)两只青蛙一开始起始位置就相同;(2)当两只青蛙起始位置不同,跳的步数不一样,那么当他们重新再各自跳回自己起始位置之前,他们见到面了。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#define maxn 21000
#define oo 0xfffffff
using namespace std;
typedef long long LL;

int main()
{
    LL x, y, m, n, l;

    while(scanf("%lld %lld %lld %lld %lld", &x, &y, &m, &n, &l)!=EOF)
    {
        if(x!=y && m==n) printf("Impossible
");
        else if(x==y)  printf("0
");
        else
        {
            LL a, b;
            int cnt=1;

            a = b = 0;

            while(1)
            {
                a = x + m*cnt;
                b = y + n*cnt;

                if(a%l == b%l)
                {
                    printf("%d
", cnt);
                    break;
                }

                else if(a%l==x && b%l==y)
                {
                    printf("Impossible
");
                    break;
                }
                cnt ++;
            }
        }
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/daydayupacm/p/5725162.html