【扩展欧几里得+解不等式】sgu106The equation
来源:互联网 发布:买家怎样取消淘宝客 编辑:程序博客网 时间:2024/05/17 00:17
题目链接
题目大意:对于一个不定方程
数据范围:每一个数的绝对值不超过
一道裸的扩展欧几里得。
首先将方程变式为
假设
若求得一组解
要判断解的个数,就是计算有多少个
对于x,
对于y,
然后再合并一下。
那么负数肿么办?
变为正数就行了。
取相反数,取值范围也取相反数。
在这里将负数变为正数是有必要的,若是负数,
在解不等式时,注意上取整和下取整的问题,最好用
#include <iostream>#include <cstdio>#include <cmath>using namespace std;typedef long long LL;void gcd(LL a,LL b,LL &d,LL &x,LL &y){ if(!b) d=a ,x=1 ,y=0 ; else { gcd(b,a%b,d,y,x); y-=a/b*x; }}LL a ,b ,c ,x1 ,x2 ,yy1 ,yy2 ;LL d ,x ,y ;int main(){ cin>>a>>b>>c>>x1>>x2>>yy1>>yy2; c=-c; if(c<0) c=-c ,a=-a ,b=-b ; if(a<0) a=-a ,swap(x1,x2) ,x1=-x1 ,x2=-x2; if(b<0) b=-b ,swap(yy1,yy2) ,yy1=-yy1 ,yy2=-yy2 ; if(a==0||b==0) { if(a==0&&b==0) { if(c==0) cout<<(x2-x1+1)*(yy2-yy1+1); else puts("0"); } else if(a==0) { if(c%b==0&&c/b>=yy1&&c/b<=yy2) cout<<x2-x1+1; else puts("0"); } else { if(c%a==0&&c/a>=x1&&c/a<=x2) cout<<yy2-yy1+1; else puts("0"); } return 0; } gcd(a,b,d,x,y); if(c%d) { puts("0"); return 0; } LL tmp=c/d ; double addx=b/d ,addy=a/d ; x*=tmp ,y*=tmp ; LL r=min(floor((x2-x)/addx),floor((y-yy1)/addy)) ,l=max(ceil((x1-x)/addx),ceil((y-yy2)/addy)) ; if(r>=l) cout<<r-l+1; else puts("0"); return 0;}
0 0
- 【扩展欧几里得+解不等式】sgu106The equation
- The equation----扩展欧几里得
- SGU 106 The equation 【扩展欧几里得算法】
- SGU 106 The Equation 扩展欧几里得应用
- SGU 106 The equation ----扩展欧几里得
- SGU - 106 - The equation (扩展欧几里得)
- The equation 之深入理解扩展欧几里得
- SGU 106 The equation【扩展欧几里得】
- SGU 106 The equation(扩展欧几里得)
- The equation(exgcd+解不等式方程组)
- poj 2115 (扩展欧几里得,二元不等式求解)
- 扩展欧几里得 解方程小记
- 扩展欧几里得最小整数解
- 【欧几里得&扩展欧几里得】
- 欧几里得和扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得&扩展欧几里得
- 欧几里得和扩展欧几里得
- IOS中枚举类型的两种定义方法以及结构体的定义
- POJ - 1251 Jungle Roads(最小生成树简单题)
- sparkSQL1.1入门
- 文章标题
- PHP substr()截取字符串时,中文出现乱码的问题解决【转】
- 【扩展欧几里得+解不等式】sgu106The equation
- shell中的${},##和%%的使用
- 二维数组作为参数传给函数
- 同步传输与异步传输的异同
- HDOJ 3746 Cyclic Nacklace
- 刷openwrt
- Objective-c 内存溢出问题经验汇总
- iOS 8 AutoLayout与Size Class
- C++拷贝构造函数(深拷贝,浅拷贝)