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

欧几里德定理 数论

  1. /*
  2. 裸的扩展欧几里得问题.
  3. 不过要特判一次函数的情况.
  4. W到挺(如图).
  5. 呵呵了..
  6. */
  7. #include<iostream>
  8. #include<cstdio>
  9. #include<algorithm>
  10. #define LL long long
  11. using namespace std;
  12. LL n,a,b,c,lx,rx,ly,ry,x,y,a1,b1;
  13. LL ans;
  14. inline LL read()
  15. {
  16. LL x=0,f=1;char ch=getchar();
  17. while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
  18. while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
  19. return x*f;
  20. }
  21. void ex_gcd(LL a,LL b,LL &x,LL &y)
  22. {
  23. if(!b){x=1,y=0;return ;}
  24. else ex_gcd(b,a%b,y,x),y-=x*(a/b);
  25. }
  26. void slove()
  27. {
  28. int g=__gcd(a,b);
  29. c*=-1;
  30. if(!a&&!b)
  31. {
  32. if(c||lx>rx||ly>ry) printf("0\n");
  33. else cout<<(rx-lx+1)*(ry-ly+1)<<endl;
  34. return ;
  35. }
  36. if(!a)
  37. {
  38. y=c/b;
  39. if(ly<=y&&y<=ry&&!(c%b)) printf("1\n");
  40. else printf("0\n");
  41. return ;
  42. }
  43. if(!b)
  44. {
  45. x=c/a;
  46. if(lx<=x&&x<=rx&&!(c%a)) printf("1\n");
  47. else printf("0\n");
  48. return ;
  49. }
  50. if(c%g)
  51. {
  52. printf("0\n");return ;
  53. }
  54. x=y=0;ans=0;
  55. ex_gcd(a,b,x,y);
  56. x=x*c/g,y=y*c/g;
  57. a=a/g,b=b/g;
  58. int t=0;
  59. if(x<lx)
  60. {
  61. while(x+t*b<lx) t++;
  62. while(x+t*b<rx)
  63. {
  64. if(ly<=y-t*a&&y-t*a<=ry) ans++;
  65. t++;
  66. }
  67. }
  68. else if(x>rx)
  69. {
  70. while(x-t*b>rx) t++;
  71. while(x-t*b>lx)
  72. {
  73. if(ly<=y+t*a&&y+t*a<=ry) ans++;
  74. t++;
  75. }
  76. }
  77. else if(x>=lx&&x<=rx)
  78. {
  79. while(x+t*b<=rx)
  80. {
  81. if(ly<=y-t*a&&y-t*a<=ry) ans++;
  82. t++;
  83. }
  84. t=-1;
  85. while(x+t*b>=lx)
  86. {
  87. if(ly<=y-t*a&&y-t*a<=ry) ans++;
  88. t--;
  89. }
  90. }
  91. printf("%lld\n",ans);
  92. }
  93. int main()
  94. {
  95. n=read();
  96. for(int i=1;i<=n;i++)
  97. {
  98. a=read(),b=read(),c=read(),lx=read(),rx=read(),ly=read(),ry=read();
  99. slove();
  100. }
  101. return 0;
  102. }

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. python---博客分类目录

    python基础 python函数 python模块 python面向对象 网络编程 并发编程 数据库 前端学习 HTML基础 CSS基础 JavaScript基础 js操作BOM和DOM jQuer ...

  2. servlet容器,web容器,spring容器,springmvc容器的区别(转)

    web容器中有servlet容器,spring项目部署后存在spring容器和springmvc容器.其中spring控制service层和dao层的bean对象.springmvc容器控制contr ...

  3. THUWC2020游记

    Day0 找了旅馆吃了东西才发现明天要去西郊宾馆,换旅馆?? 清华还安排住宿? asas了. 下午出去和kx&face报PKU的名.然后门卫不让进,老吕开启忽悠模式,然后很快就忽悠过去了.(我 ...

  4. Neo4j Cypher语法(二)

    目录 4 子句 4.1 CREATE 4.2 MATCH 4.3 Match 4.4 Create match return连用来返回一个关系基础 4.5 Optional_match 4.6 Wit ...

  5. CSM(Certified Scrum Master) 敏捷认证是什么?

    Scrum 是用于开发和持续支持复杂产品的一个框架.Scrum 基于试验性过程控制理论,借鉴了精益思想.时间盒.模块化设计等,并完整地体现了敏捷宣言和敏捷原则.Scrum 采用一种迭代.增量式的方法来 ...

  6. .Net Core 3.0 内置依赖注入:举例

    原文:.Net Core 3.0 内置依赖注入:举例 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  7. day12 css样式

    目录 1.标签分类   2.浮动布局   3.margin塌陷   4.定位postion   5.背景图 一. 标签分类 默认在标准文档流 行内标签 span,a,em,i,strong,b,inp ...

  8. linux下共享热点抓包

    Linux有一个抓包工具叫tcpdump,这个命令还是挺强大的.简单列举一下它的参数 # tcpdump -h tcpdump version 4.9.2 libpcap version 1.8.1 ...

  9. beego中获取url以及参数的方式

    以下都全默认在controller下执行 获取当前请求的referer fmt.Println(this.Ctx.Request.Referer()) 输出:http://localhost:8080 ...

  10. javascript 元编程之-代码修改代码

    javascript 元编程之-代码修改代码 引言 重构代码是个体力活,特别是在确定重构方案后,剩下就是按方案调整代码,然后进行测试. 如何有好又快的调整到位代码,这是件不容易的事. 简单的代码,可以 ...