SGU 106 The equation 扩展欧几里得好题
扩展欧几里得的应用……见算法竞赛入门经典p.179
注意两点:1.解不等式的时候除负数变号
2.各种特殊情况的判断( a=0 && b=0 && c=0 ) ( a=0 && b=0 && c!=0 ) ( a=0 && b!=0 )( a!=0 && b=0 )
能加深对扩展欧几里得的理解,不错的一题
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm> #define LL long long int using namespace std; void ExGcd( LL a, LL b, LL &d, LL &x, LL &y )
{
if ( !b )
d = a, x = , y = ;
else
{
ExGcd( b, a % b, d, y, x );
y -= x * ( a / b );
}
return;
} int main()
{
LL a, b, c, x1, x2, y1, y2;
while ( scanf( "%I64d%I64d%I64d%I64d%I64d%I64d%I64d", &a, &b, &c, &x1, &x2, &y1, &y2 ) == )
{
if ( a == && b == )
{
if ( c == )
printf( "%I64d\n", (x2 - x1 + )*(y2 - y1 + ) );
else puts("");
continue;
}
if ( a == )
{
if ( (-c) % b == )
{
LL y = (-c) / b;
if ( y >= y1 && y <= y2 ) puts("");
else puts("");
}
else puts(""); continue;
}
if ( b == )
{
if ( (-c) % a == )
{
LL x = (-c) / a;
if ( x >= x1 && x <= x2 ) puts("");
else puts("");
}
else puts("");
continue;
}
LL g, x0, y0;
ExGcd( a, b, g, x0, y0 );
if ( (-c) % g == ) //如果有解
{
x0 = x0 * (-c) / g;
y0 = y0 * (-c) / g; LL aa = a / g;
LL bb = b / g;
LL low, high;
if ( aa > && bb > )
{
low = max( (x0 - x1) / bb, (y0 - y2) / aa );
high = min( (x2 - x0) / bb, (y0 - y1) / aa );
printf("%I64d\n", high - low + );
}
else if ( aa > && bb < )
{
low = max( (x2 - x0) / bb, (y0 - y2) / aa );
high = min( (x0 - x1) / bb, (y0 - y1) / aa );
printf("%I64d\n", high - low + );
}
else if ( aa < && bb > )
{
low = max( (x0 - x1) / bb, (y0 - y1) / aa );
high = min( (x2 - x0) / bb, (y0 - y2) / aa );
printf("%I64d\n", high - low + );
}
else if ( aa < && bb < )
{
low = max( (x2 - x0) / bb, (y0 - y1) / aa );
high = min( (x0 - x1) / bb, (y0 - y2) / aa );
printf("%I64d\n", high - low + );
}
}
else puts("");
}
return ;
}
SGU 106 The equation 扩展欧几里得好题的更多相关文章
- SGU 106 The Equation 扩展欧几里得应用
Sol:线性不定方程+不等式求解 证明的去搜下别人的证明就好了...数学题. #include <algorithm> #include <cstdio> #include & ...
- SGU 106 The equation 扩展欧几里德
106. The equation time limit per test: 0.25 sec. memory limit per test: 4096 KB There is an equation ...
- Codeforces7C 扩展欧几里得
Line Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- 51nod1256 乘法逆元【扩展欧几里得】
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, N中间用 ...
- [poj1061]青蛙的约会<扩展欧几里得>
题目链接:http://poj.org/problem?id=1061 其实欧几里得我一直都知道,只是扩展欧几里得有点蒙,所以写了一道扩展欧几里得裸题. 欧几里得算法就是辗转相除法,求两个数的最大公约 ...
- SGU 140 扩展欧几里得
题目大意: 给定序列a[] , p , b 希望找到一个序列 x[] , 使a1*x1 + a2*x2 + ... + an*xn = b (mod p) 这里很容易写成 a1*x1 + a2*x2 ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- [codeforces 200 E Tractor College]枚举,扩展欧几里得,三分
题目出自 Codeforces Round #126 (Div. 2) 的E. 题意大致如下:给定a,b,c,s,求三个非负整数x,y,z,满足0<=x<=y<=z,ax+by+cz ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)
http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...
随机推荐
- TF/IDF(term frequency/inverse document frequency)
TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明. 一. TF/IDF描述单个term与特定document的相 ...
- timersmanager 解析
最近在看crtmp源代码,看到timersmanager 模块时感觉很难理解,花了不少时间反复思考该模块 的逻辑,现在思考的结果记录下来,方便以后查阅. 构造函数中将处理时间方法传进来,将_lastT ...
- HTML5 编码规范
在编写HTML时,可能有一些方面不够规范,在通过对<HTML5编码规范>的学习后,采用代码注解的方式,做相关的整理,方便今后回顾. <!DOCTYPE html> <!- ...
- hdu 2686 Matrix 最小费用最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 Yifenfei very like play a number game in the n*n ...
- hdu 1075 What Are You Talking About
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075 题意:比较简单,易懂,这里不做说明. 解法:第一种方法:用map映射,耗时1000+ms:第二种 ...
- Leetcode#90 Subsets II
原题地址 跟Subsets(参见这篇文章)类似. 但因为有重复元素,所以要考虑去重问题. 什么情况下会出现重复呢?比如S = {5, 5, 5},如果要选1个5,一共有C(3,1)=3种选法,即100 ...
- HttpWatch 安装后在IE上打开
启动浏览器, 在空白地方左键, 显示出菜单栏 菜单栏中选择"查看">"浏览器栏">"HttpWatch"启动HttpWatch ...
- uialertview 改变文字显示位置
- (void)willPresentAlertView:(UIAlertView *)alertView{ UIView * view = [alertView.subviews objectAtI ...
- BZOJ 3155: Preprefix sum
大意:给一个数组,先求出SUM[I],然后动态的求出1-I的SUM[I]的和, 这题得化公式: 树状数组维护两个和:SUM(A[I])(1<=I<=X); SUM(A[I]*(N-I+1) ...
- HDOJ 2082 找单词 (母函数)
找单词 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...