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; }