bzoj 5027: 数学题
来源:互联网 发布:linux 批量删除进程 编辑:程序博客网 时间:2024/05/19 02:23
题意:给出a,b,c,x1,x2,y1,y2,求满足ax+by+c=0,且x∈[x1,x2],y∈[y1,y2]的整数解有多少对?
题解:扩展欧几里得
求出一组解,求出满足x∈[x1,x2],y∈[y1,y2]的x和y相对求出来的是第几组(大概理解一下就好。。。)。取交集就好。注意特判,具体看代码。
代码:
#include<bits/stdc++.h>#define pa pair<long long,long long>#define l first#define r secondusing namespace std;long long a,b,c,X1,X2,Y1,Y2;long long exgcd(long long a,long long b,long long&x,long long&y){ if(b==0) { x=1; y=0; return a; } long long tx,ty,d=exgcd(b,a%b,tx,ty); x=ty; y=tx-(a/b)*ty; return d;}long long wk(double x,long long type){ if(type) return int(ceil(x)); else return int(floor(x));}pa get(long long l,long long r,long long x,long long d){ pa ans; if(l>=x) { ans.l=wk(1.0*(l-x)/d,d>0); ans.r=(r-x)/d; } else if(r<=x) { ans.l=(l-x)/d; ans.r=wk(1.0*(r-x)/d,d<0); } else { ans.l=(l-x)/d; ans.r=(r-x)/d; } if(d<0) swap(ans.l,ans.r); return ans;}int main(){ scanf("%lld%lld%lld%lld%lld%lld%lld",&a,&b,&c,&X1,&X2,&Y1,&Y2); if(a==0&&b==0) { if(!c) printf("%lld",(abs(X1-X2)+1)*(abs(Y1-Y2)+1)); else puts("0"); return 0; } long long x,y,d=exgcd(a,b,x,y); if(c%d) { puts("0"); return 0; } long long t=-c/d; x*=t; if(b) y=(-c-a*x)/b; long long dx=b/d,dy=-a/d; if(dx==0) { if(dy==0) { if(x>=X1&&x<=X2&&y>=Y1&&y<=Y2) { puts("1"); return 0; } } if(x>=X1&&x<=X2) printf("%lld",Y2-Y1+1); else puts("0"); return 0; } else if(dy==0) { if(y>=Y1&&y<=Y2) printf("%lld",X2-X1+1); else puts("0"); return 0; } else if((dx>0)==(dy>0)) { dx=abs(dx); dy=abs(dy); } else if(dx<0) { dx=-dx; dy=-dy; } pa xx=get(X1,X2,x,dx),yy=get(Y1,Y2,y,dy); printf("%lld",max(0LL,min(xx.r,yy.r)-max(xx.l,yy.l)+1));}
阅读全文
0 0
- bzoj 5027: 数学题
- bzoj 5027: 数学题
- BZOJ 1257 数学题
- BZOJ 1257 - 数学题 乱搞
- 数学题 糖果传递 bzoj
- BZOJ 2901(矩阵求和-数学题)
- 【bzoj 2627】JZPTAB - 乱搞数学题
- 【bzoj 3434】 WC2014 时空穿梭 - 乱搞数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- 数学题
- MT5 CRM支持接口开发
- Leetcode: 34. Search for range(Week9, Medium)
- Vue.JS实战:简单的购物车(二)
- 51nod 1289 大鱼吃小鱼
- 基于不同STM32库函数的代码性能对比
- bzoj 5027: 数学题
- Java位运算
- 欢迎使用CSDN-markdown编辑器
- qsort详解第二篇 转载
- java封装中的内部类
- 2017CCPC秦皇岛 L:One-Dimensional Maze
- ubunut安装指令
- 初识TypeScript
- 【boolan c++】面向对象的三大方式以及设计模式