Codeforces 787 A The Monster 擴歐
阿新 • • 發佈:2017-10-04
是否 bsp esp 等差數列 spl 理解 存在 pan pac
題目鏈接: http://codeforces.com/problemset/problem/787/A
題目描述: 問等差數列c1 + a*x(a 為 常數), c2 + b*y(b 為 常數) 能不能有一項是相等的
解題思路: a*x + c1 = b*y + c2, a*x + b*(-y) = c2 - c1 = c, 所以問題等價於是否存在正整數使得等式成立, 擴歐
代碼:
#include <iostream> #include <cstdio> #include <map> #include <iterator> #includeView Code<string> #include <algorithm> #include <vector> #include <cmath> #include <cstring> using namespace std; typedef long long ll; void exgcd( int a, int b, int &g, int &x, int &y ) { if( !b ) { x = 1, y = 0, g = a; } else { exgcd(b, a%b, g, y, x); y-= a / b * x; } } int main() { int a, c1, b, c2; cin >> a >> c1 >> b >> c2; int c = c2 - c1; int g, x, y; exgcd(a, b, g, x, y); if( c % g ) { cout << -1 << endl; } else { int b1 = b / g; x *= (c/g); x= (x%b1+b1)%b1; while( (c-a*x)/b > 0 ) x += b1; cout << a * x + c1 << endl; } return 0; }
思考: 自己對擴歐的理解還是不夠深刻
Codeforces 787 A The Monster 擴歐