Codeforces 787 A The Monster 扩欧
Posted FriskyPuppy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 787 A The Monster 扩欧相关的知识,希望对你有一定的参考价值。
题目链接: 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; }
思考: 自己对扩欧的理解还是不够深刻
以上是关于Codeforces 787 A The Monster 扩欧的主要内容,如果未能解决你的问题,请参考以下文章
codeforces 787D - Legacy 线段树优化建图,最短路
Educational Codeforces Round 7 F - The Sum of the k-th Powers 拉格朗日插值