求一条线段上有多少个整点。

是道扩欧基础题,列出两点式方程,然后分四种情况讨论即可。但细节处理较多很容易写挫(某zzWA了十几发才过掉的)。

由于数据精度较小,浮点数比较没有用eps,直接==比较了。

 #include<bits/stdc++.h>

 using namespace std;
typedef long long ll; void exgcd(ll a,ll b,ll& x,ll& y,ll& g) {
if(!b)x=,y=,g=a;
else exgcd(b,a%b,y,x,g),y-=x*(a/b);
} ll solve(double x1,double y1,double x2,double y2) {
if(x1>x2||(x1==x2&&y1>y2))swap(x1,x2),swap(y1,y2);
if(x1==x2&&y1==y2) {
if(x1==round(x1)&&x2==round(x2))return ;
else return ;
} else if(x1==x2) {
if(x1==round(x1))return floor(y2)-ceil(y1)+;
else return ;
} else if(y1==y2) {
if(y1==round(y1))return floor(x2)-ceil(x1)+;
else return ;
} else {
ll a=round((y2-y1)*),b=round((x1-x2)*),c=round((y2*x1-y1*x2)*);
ll x,y,g;
exgcd(a,b,x,y,g);
if(c%g==) {
x*=c/g;
ll bb=abs(b/g);
ll xl=ceil(x1),xr=floor(x2);
ll xll=x+(xl-x)/bb*bb;
ll xrr=x+(xr-x)/bb*bb;
if(xll<xl)xll+=bb;
if(xrr>xr)xrr-=bb;
return max(0ll,(xrr-xll)/bb+);
} else return ;
}
} int main() {
ll T;
scanf("%lld",&T);
while(T--) {
double x1,y1,x2,y2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
printf("%lld\n",solve(x1,y1,x2,y2));
}
return ;
}

最新文章

  1. 谢欣伦 - OpenDev原创例程 - 网络摄像机WebCamera
  2. cxf 调用 webservice服务时传递 服务器验证需要的用户名密码
  3. VMware-workstation-full-11.0.0-2305329&amp;VMware-player-7.0.0-2305329
  4. 每天一个 Linux 命令(15):tail 命令
  5. Atiti &#160;attilax主要成果与解决方案与案例rsm版 v4
  6. python学习笔记4(文件操作)
  7. Android系统中Parcelable和Serializable的区别
  8. .NET自动识别HttpWebResponse的编码及是否压缩
  9. input onfocus onblur
  10. ADLINK 8158控制程序-连续运动(VB.NET)
  11. JS跨域请求之JSONP
  12. SSM框架整合,以CRM为例子
  13. web开发简史与技术选型
  14. Java框架spring 学习笔记(十一):aop相关概念
  15. 关于iOS设备的那些事
  16. centos7中docker操作
  17. java 多线程研究:锁的概念
  18. Ansible6:Playbook简单使用
  19. Node.js系列——(4)优势及场景
  20. mb_strlen(,utf-8);可以除去中文字符,统一返回是几个字符

热门文章

  1. This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in问题
  2. PAT 天梯赛 L1-037. A除以B 【水】
  3. HTTP学习笔记05-首部
  4. unicode和utf8
  5. CSS3动画库animate.css
  6. debian内核代码执行流程(一)
  7. Go CSP模型
  8. 0x5C 计数类DP
  9. DP问题分类总结
  10. 基于canvas与原生JS的H5动画引擎