博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段上格点的个数
阅读量:6380 次
发布时间:2019-06-23

本文共 703 字,大约阅读时间需要 2 分钟。

线段上格点的个数

 

题目:给定平面上的两个格点P1=(x1,y1)和P2=(x2,y2),线段P1P2上,

除P1和P2以外一共有几个格点?

 

输入:一行包括四个数,分别为x1,x2,y1和y2,两两之间用一个空

格分隔。

 

输出:输出一个数,表示题目描述的格点的个数。

 

输入示例:1 5 11 3

 

输出示例:3

 

数据范围:-10^9<=x1,x2,y1,y2<=10^9

 

 

 

题解:检查所有满足min(x1,x2)<=x<=max(x1,x2)min(y1,y2)<=y<=max(y1,y2)的格点虽然可以得到正确的答案,但是时间复杂度是O(abs(x1-x2)*abs(y1-y2)),对坐标绝对值较大的数据无法处理

所以只需求abs(x1-x2)abs(y1-y2)的最大公约数-1即可。(注意特判abs(x1-x2)=0abs(y1-y2)=0的答案也是0)

 

 

#include
#include
using namespace std;int gcd(int a,int b){
if(b==0)return a;return gcd(b,a%b);}int main(){ int x1,x2,y1,y2; scanf("%d%d%d%d",&x1,&x2,&y1,&y2); int x=abs(x1-x2),y=abs(y1-y2); if(x==y){ cout<<0<

 

转载于:https://www.cnblogs.com/543Studio/p/5157586.html

你可能感兴趣的文章
Windows Server 2008 多元密码策略配置
查看>>
.NET中的泛型和Java泛型中的类型擦除
查看>>
白利用的集大成者:新型远控木马上演移形换影大法
查看>>
2017必备的八款最佳反勒索软件工具
查看>>
从Effective Java总结一些有助安卓开发的建议
查看>>
以一当十的程序员不是传说
查看>>
云纵发布“纵横客“ 新一代互联网CRM开启餐饮行业营销新模式
查看>>
物联网到底何时才能称为“爆发”?
查看>>
《Java多线程编程核心技术》——1.2节使用多线程
查看>>
《VMware 网络技术:原理与实践》—— 2.3 OSI模型
查看>>
读书笔记之《实战Java虚拟机》(9):Class 文件结构
查看>>
1024城市峰会 | 当A.I.邂逅古都西安
查看>>
好看的卡片阴影
查看>>
理解 Mach O 并提高程序启动速度
查看>>
Vue实战篇(PC端商城项目)
查看>>
你要做的是产品经理,不是作图经理!
查看>>
JavaEE 项目常见错误汇总
查看>>
快速掌握Python基础语法(下)
查看>>
【Android自定义View】绘图之文字篇(三)
查看>>
适配iOS 11和iPhoneX屏幕适配遇到的一些坑
查看>>