题目描述 Description

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

ax+by+c = 0

p<=x<=q

r<=y<=s

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

输入描述 Input Description

第一行有一个整数nn<=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

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll x,y,a,b,c,g,p,q,r,s;
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b == ){
x = ;
y = ;
return a;
}
ll ans = exgcd(b,a%b,x,y);
ll t = x;
x = y;
y = t - (a/b) * y;
return ans;
}
ll gcd(ll a,ll b){
return b == ? a : gcd(b,a%b);
}
int main(){
int n;
cin>>n;
for(int i = ;i <= n;i++){
cin>>a>>b>>c>>p>>q>>r>>s;
c = -c;
if(a == && b == && c!= ){
cout<<<<endl;
continue;
}
if(q < p || s < r){
cout<<<<endl;
continue;
}
if(a == && b== && c==){
cout<<(q-p+)*(s-r+)<<endl;
continue;
}
g = exgcd(a,b,x,y);
x *= c/g;
y *= c/g;
if(x*a + y*b != c){
cout<<<<endl;
continue;
}
ll plusx = b / g,plusy = a / g,dx,dy;
ll acc = ;
bool fu;
if(plusx < ) fu = true;
else fu = false;
while(x < p){
if(plusx == ) break;
if(!fu) x+=plusx,y-=plusy;
else x-=plusx,y+=plusy;
}
while(x > q){
if(plusx == ) break;
if(!fu) x-= plusx,y+=plusy;
else x+=plusx,y-=plusy;
}
if(x >= p && x <= q && y >= r && y <= s)acc++;
dx = x;
dy = y;
while(dx >= p){
if(plusx == ) break;
if(!fu){
dx -= plusx;
dy += plusy;
}else{
dx += plusx;
dy -= plusy;
}
if(dx >= p && dx <= q && dy >= r && dy <= s) acc++;
}
dx = x;
dy = y;
while(dx <= q){
if(plusx == ) break;
if(!fu){
dx += plusx;
dy -= plusy;
}else{
dx -= plusx;
dy += plusy;
}
if(dx >= p && dx <= q && dy >= r && dy <= s) acc++;
}
cout<<acc<<endl;
}
return ;
}

codevs1213 解的个数的更多相关文章

  1. 解的个数(codevs 1213)

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

  2. 扩展gcd codevs 1213 解的个数

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

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

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

  4. codevs 1213 解的个数

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

  5. Codevs 1213 解的个数(exgcd)

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

  6. P1098 方程解的个数

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

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

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

  8. 计蒜客 18487.Divisions-大数的所有因子个数-Miller_Rabin+Pollard_rho-超快的(大数质因解+因子个数求解公式) (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 F)

    这一场两个和大数有关的题目,都用到了米勒拉宾算法,有点东西,备忘一下. 题目传送门 F. Divisions 传送门 这个题是求一个数的所有因子个数,但是数据比较大,1e18,所以是大数的题目,正常的 ...

  9. hdu4282 x^z+y^z+x*y*z=k 解的个数

    题意:      x^z + y^z + x*y*z = k; (x < y ,z > 1),给你一个k问有多少组解. 思路:        暴力枚举z,y,然后二分查找x.注意一点最好用 ...

随机推荐

  1. c++ swap函数

    swap(a,b)也就是把a和b的值互换. 头文件:#include<algorithm>,swap要加using namespace std:

  2. linux学习之路7 linux下获取帮助

    help 帮助 ls -h或者ls - -help man 最常用的帮助命令 man (+数字 )+命令 (数字代表文档帮助类型) man -k 关键字 可以用来查询包含该关键字的文档 info 与m ...

  3. Linux命令(007) -- systemctl

    systemctl命令是系统服务管理指令,它实际上是将service和chkconfig两个命令组合到一起. 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 httpd ...

  4. 全面学习ORACLE Scheduler特性(5)Schedules调度Programs执行的Jobs

    3.2 Schedules调度Programs执行的Jobs 通过schedule调度program的执行的job,看到这样的形容是不是让你彻底晕头了,就说明你还是没搞明白10g中SCHEDULERS ...

  5. 全面学习ORACLE Scheduler特性(3)使用Programs

    二.使用Programs 在论坛中偶尔见过有人讨论如何在ORACLE中执行操作系统命令,或是ORACLE数据库外的应用.应该说在9i及之前的版本中,虽然说并非完全无法实现(其实还是有多种方式能够变相实 ...

  6. 388 Longest Absolute File Path 最长的绝对文件路径

    详见:https://leetcode.com/problems/longest-absolute-file-path/description/ C++: class Solution { publi ...

  7. keystore找回密码

    昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了. 蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各个门户网站注册基本上用的都是那几个字母和数字组合 ...

  8. jvm内存分区

    java内存是由jvm进行管理的,其内存简易模型如下图: jvm管理的内存大体上可分为方法区.堆.程序计数器.线程栈.本地方法区这几部分.方法区:主要存放类的元信息(包括类的名称.修饰符.静态变量.f ...

  9. HTML空格占位

      它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格,大多数的人可能只接触了 ,它是按下space键产生的空格.在HTML中,如果你用空格键产生此空格,空格是不会累加的 ...

  10. oa系统部署

    1.配置java环境变量 新建:JAVA_HOME C:\Program Files\Java\jdk1.6.0_45 path添加   C:\Program Files\Java\jdk1.6.0_ ...