码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1061

时间:2015-10-30 22:55:08      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

这次思路倒是挺容易想。。

设答案为a,跑过b圈,由题意得ma+x=na+y+lb

整理后(m-n)a+lb=y-x 注意m-n的正负,用exgcd就可以了

但由于之前的数据都多少有些特殊,所以写得很慢。。(再这么慢下去可不行呀QAQ)

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<queue>
 6 #define inc(i,l,r) for(i=l;i<=r;i++)
 7 #define dec(i,l,r) for(i=l;i>=r;i--)
 8 #define mem(a) memset(a,0,sizeof(a))
 9 #define inf 1e9
10 #define ll long long
11 #define succ(x) (1<<x)
12 using namespace std;
13 ll read(){
14     ll x=0,f=1;char ch=getchar();
15     while(!isdigit(ch)){if(ch==-)f=-1;ch=getchar();}
16     while(isdigit(ch))x=x*10+ch-0,ch=getchar();
17     return x*f;
18 }
19 ll x,y,m,n,l,d,a,b;
20 void exgcd(ll a,ll b,ll&x,ll&y){
21     if(b==0){
22         d=a;x=1;y=0;
23     }else{
24         exgcd(b,a%b,y,x);
25         y-=(a/b)*x;
26     }
27 }
28 int main(){
29         x=read();y=read();m=read();n=read();l=read();
30         if(m<n){
31             swap(m,n);swap(x,y);
32         }
33         exgcd(m-n,l,a,b);
34         if((y-x)%d){
35             printf("Impossible\n");
36             return 0;
37         }
38         a*=(y-x)/d;
39         d=l/d;
40         printf("%lld",(a%d+d)%d);
41         return 0;
42 }
View Code

 

poj 1061

标签:

原文地址:http://www.cnblogs.com/onlyRP/p/4924549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!