1. 程式人生 > >Codeforces 787 A The Monster 擴歐

Codeforces 787 A The Monster 擴歐

是否 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>
#include 
<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; }
View Code

  思考: 自己對擴歐的理解還是不夠深刻

  

Codeforces 787 A The Monster 擴歐