B - 楼下水题
Crawling in process...
Crawling failed
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Description
A line on the plane is described by an equation Ax + By + C = 0. You are to find any point on this line, whose coordinates are integer numbers from - 5·1018 to 5·1018 inclusive, or to find out that such points do not exist.
Input
The first line contains three integers A, B and C ( - 2·109 ≤ A, B, C ≤ 2·109) — corresponding coefficients of the line equation. It is guaranteed that A2 + B2 > 0.
Output
If the required point exists, output its coordinates, otherwise output -1.
Sample Input
Input
2 5 3
Output
6 -3
分析:
这道题意思就是 给你 a b c 的值 ,然后求最小的x ,y 的值。
因为数据太大,这道题用暴力跟定超时,所有用拓展gcd来写。
代码:
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> using namespace std; typedef long long ll; ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } void extend_Euclid(ll a,ll b,ll &x,ll &y) { if(b==0) { x=1; y=0; return; } extend_Euclid(b,a%b,x,y); ll tmp =x; x=y; y=tmp-(a/b)*y; } int main() { ll a,b,c,x,y; while(cin>>a>>b>>c) { c=-c; ll g=gcd(a,b); if(c%g) { printf("-1\n"); continue; } a/=g; b/=g; c/=g; extend_Euclid(a,b,x,y); printf("%lld %lld\n",x*c,y*c); } return 0; }