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. linux kprobe rootkit学习

    介绍 <linux二进制分析>中提到了使用kprobe来写内核rootkit,还给出了一个简单的源码实现,这里看一下他的源码 kprobe kprobe的介绍可以看下面这几篇文章 介绍:h ...

  2. Springboot导出Excel并下载

    引入相关依赖 <!--数据导出excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> & ...

  3. js排列组合

    /* 全排列主要用到的是递归和数组的插入 arr: 需要排列的数组 第一步:从里面取一个,创建一个新的数组,形式为二维,例如arr = [1,2,3]; 取出3(没有特殊要求,随便取一个),放入 te ...

  4. 并不对劲的2-SAT

    说明 板板题链接 这个人讲得很清楚 WAWAWAWA 建的边"不完整",比如当限制是"x为1时y一定为1"时,连x->y的边时,忘记连y'->x'的 ...

  5. mybatis中collection子查询注入参数为null

    具体实现参照网上,但是可能遇到注入参数为null的情况,经过查阅及自己测试记录一下: 子查询的参数中,有<if test="">之类,需要指定别名,通过 http:// ...

  6. JS基础_while循环

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. java文件上传复制等功能

    package com.sitech.message.controller.task;import java.io.File;//引入类 import java.io.FileInputStream; ...

  8. 第十章、datetime模块

    目录 第十章.datetime模块 一.datetime 模块 第十章.datetime模块 一.datetime 模块 import datetime#返回当前时间 print(datetime.d ...

  9. 解决办法:Message: 对实体 "useUnicode" 的引用必须以 ';' 分隔符结尾

    Hibernate 5.3.1 INFO: HHH000206: hibernate.properties not foundException in thread "main" ...

  10. GNU编译器:Codesourcery

    Codesourcery G++是个商业软件, 不过它有个lite版本,是完全免费的,只不过没有IDE,只有commmand line. Codesourcery G++支持coldfire, pow ...