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. 进阶Java编程(5)基础类库

    Java基础类库 1,StringBuffer类 String类是在所有项目开发之中一定会使用到的一个功能类,并且这个类拥有如下的特点: ①每一个字符串的常量都属于一个String类的匿名对象,并且不 ...

  2. C#求1-100的质数,100-1000的水仙花数,1-100所有的平方和平方平方根

    //你们的鼓励是我最大的动力 大家可以多留言评论  在接下来很长一段时间我会从初级到高级每天更新 大家有想学习的内容也可以留言哦 //现在是我做C#老师的第28天,希望和大家一起努力 加油 using ...

  3. EntityFramework学习要点记一

    一.Entity的注解属性(Annotations)不管是code first还是db first,都需要用到注解属性,至于用System.ComponentModel.DataAnnotations ...

  4. 一行python能干什么?

    我们都知道,python作为一个编程语言,它有一个最大的优势就是代码简短,那么一行python代码能实现哪些操作呢?一起来看看吧! 1.打印Hello World! 这是最基础的,相信不管学习哪一门语 ...

  5. 防止表单提交时刷新页面-阻止form表单的默认提交行为

    最近在写 ajax 提交的时候遇到一个问题,在执行 ajax 提交之后,浏览器页面自动刷新了,主要是没有 由于form 表单的默认提交行为.一下是几种阻止 form 表单默认提交行为的方式. 1.使用 ...

  6. HTML5中新增加的结构元素、网页元素和全局属性

    HTML5新增的结构元素(新增的都是块元素,独占一行) 1) header 定义了文档的头部区域 <header> <h1>网站标题<h1> </header ...

  7. WebStorm 使用技巧

    常用快捷键 代码编辑 ctrl + d:复制行 ctrl + y:删除行 ctrl + x:剪切行 ctrl + shift + ↑: 行移动 ctrl + shift + enter: 换行 ctr ...

  8. vue进阶:vue-router之导航守卫、路由元信息、路由懒加载

    1.导航被触发 2.在失活的组件里调用离开守卫:beforeRouteLeave —— 组件内守卫(离开组件). 3.调用全局的beforeEach守卫 —— 全局守卫(进入组件). 4.在重用组件里 ...

  9. JS中有两种自加法操作

    JS中有两种自加法操作.它们的运算符是++,它们的函数是向1添加运算符. 我和我的区别在于操作的顺序和组合的方向. 其中:++var被称为预自动添加,变量执行自动添加操作后.它的操作是先执行自动加法操 ...

  10. Java反射【一、概述】

    .net也使用过反射,不过用的比较浅显,用来记日志等.. Java基础课程学习已经过了一段时间了,接下来继续学习 本次学习包含以下内容 Java反射[一.概述] Java反射[二.Class类的使用] ...