1213 解的个数

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

题目描述 Description

已知整数x,y满足如下面的条件:

ax+by+c=0

p<=x<=q

r<=y<=s

求满足这些条件的x,y的个数。

输入描述 Input Description

第一行有一个整数n(n<=10),表示有n个任务。n<=10

以下有n行,每行有7个整数,分别为:a,b,c,p,q,r,s。均不超过108。

输出描述 Output Description

共n行,第i行是第i个任务的解的个数。

样例输入 Sample Input

2

2 3 -7 0 10 0 10

1 1 1 -10 10 -9 9

样例输出 Sample Output

1

19

数据范围及提示 Data Size & Hint

分类标签 Tags

欧几里德定理 数论

/*
裸的扩展欧几里得问题.
不过要特判一次函数的情况.
W到挺(如图).
呵呵了..
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std;
LL n,a,b,c,lx,rx,ly,ry,x,y,a1,b1;
LL ans;
inline LL read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
void ex_gcd(LL a,LL b,LL &x,LL &y)
{
if(!b){x=1,y=0;return ;}
else ex_gcd(b,a%b,y,x),y-=x*(a/b);
}
void slove()
{
int g=__gcd(a,b);
c*=-1;
if(!a&&!b)
{
if(c||lx>rx||ly>ry) printf("0\n");
else cout<<(rx-lx+1)*(ry-ly+1)<<endl;
return ;
}
if(!a)
{
y=c/b;
if(ly<=y&&y<=ry&&!(c%b)) printf("1\n");
else printf("0\n");
return ;
}
if(!b)
{
x=c/a;
if(lx<=x&&x<=rx&&!(c%a)) printf("1\n");
else printf("0\n");
return ;
}
if(c%g)
{
printf("0\n");return ;
}
x=y=0;ans=0;
ex_gcd(a,b,x,y);
x=x*c/g,y=y*c/g;
a=a/g,b=b/g;
int t=0;
if(x<lx)
{
while(x+t*b<lx) t++;
while(x+t*b<rx)
{
if(ly<=y-t*a&&y-t*a<=ry) ans++;
t++;
}
}
else if(x>rx)
{
while(x-t*b>rx) t++;
while(x-t*b>lx)
{
if(ly<=y+t*a&&y+t*a<=ry) ans++;
t++;
}
}
else if(x>=lx&&x<=rx)
{
while(x+t*b<=rx)
{
if(ly<=y-t*a&&y-t*a<=ry) ans++;
t++;
}
t=-1;
while(x+t*b>=lx)
{
if(ly<=y-t*a&&y-t*a<=ry) ans++;
t--;
}
}
printf("%lld\n",ans);
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
a=read(),b=read(),c=read(),lx=read(),rx=read(),ly=read(),ry=read();
slove();
}
return 0;
}

Codevs 1213 解的个数(exgcd)的更多相关文章

  1. 扩展gcd codevs 1213 解的个数

    codevs 1213 解的个数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 已知整数x,y满足如下面的条件: ax+by ...

  2. codevs 1213 解的个数

    1213 解的个数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold       题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c = ...

  3. codevs 1213 解的个数(我去年打了个表 - -)

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; int T,x ...

  4. 解的个数(codevs 1213)

    题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c = 0 p<=x<=q r<=y<=s 求满足这些条件的x,y的个数. 输入描述 Input ...

  5. codevs1213 解的个数

    题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c = 0 p<=x<=q r<=y<=s 求满足这些条件的x,y的个数. 输入描述 Input ...

  6. n元线性方程非负整数解的个数问题

    设方程x1+x2+x3+...+xn = m(m是常数) 这个方程的非负整数解的个数有(m+n-1)!/((n-1)!m!),也就是C(n+m-1,m). 具体解释就是m个1和n-1个0做重集的全排列 ...

  7. P1098 方程解的个数

    题目描述 给出一个正整数N,请你求出x+y+z=N这个方程的正整数解的组数(1<=x<=y<=z<1000).其中,1<=x<=y<=z<=N . 输入 ...

  8. HDU1573 线性同余方程(解的个数)

    X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. CODEVS——T1979 第K个数

    http://codevs.cn/problem/1979/ 时间限制: 1 s  空间限制: 1000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descript ...

随机推荐

  1. jenkins+docker+git+etcd实现应用配置文件管理

    两台机器: 一台机器安装gitlab: http://www.cnblogs.com/cjsblogs/p/8716932.html 另一台机器安装etcd+docker+jenkins jenkin ...

  2. Android获取网络时间的方法

    一.通过免费或者收费的API接口获取 1.免费 QQ:http://cgi.im.qq.com/cgi-bin/cgi_svrtime 淘宝:http://api.m.taobao.com/rest/ ...

  3. axios配置

    import axios, { isCancel } from 'axios' import { md5 } from 'vux' import util from '@/libs/util' imp ...

  4. O050、Create Volume 操作 (Part I)

    参考https://www.cnblogs.com/CloudMan6/p/5603312.html   前面已经学习了Cinder的架构和相关组件,从本节开始详细分析 Cinder 的各种操作,首先 ...

  5. 【ExtJs】ext前台中的日期控件传输时间到后台的转换保存过程

    //前台日期选择框 {fieldLabel:, padding: ',afterLabelTextTpl: required,allowBlank: false,format: 'Y-m-d H:i: ...

  6. 可能是全网最全的http面试答案

    HTTP有哪些方法? HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNE ...

  7. GitHub使用--01

    1.Git下载与安装 Git网站下载地址https://git-scm.com/downloads 2.本地Git使用 在存储代码仓库的文件夹下右键 git bash here 初始化仓库 git i ...

  8. https://bbs.ichunqiu.com/thread-48915-1-1.html

    使用BurpSuite进行双文件上传拿Webshell 首先进入网站后台:(后台界面应该是良精CMS) <ignore_js_op> 在 添加产品 这一栏有个上传文件: <ignor ...

  9. axios表单提交,delete,get请求(待完善)

    import { mapMutations} from 'vuex' import axios from 'axios' const mixins = { data() { return { } }, ...

  10. 网络初级篇之VLAN间路由(原理与配置)

    一.VLAN间的路由 由于VLAN隔离了二层广播域,也间接的隔离了各个VLAN之间的其他二层流量交换,这样导致属于不同VLAN之间的用户不能进行二层的通信.只能经过三层的路由转发才能将报文从一个VLA ...