统计线段上格点的数量100%AC题解
2026-03-21 16:31:35
发布于:上海
5阅读
0回复
0点赞
解题思路
这道题的核心是求线段上的格点数量,有一个经典的数学公式可以直接解决,不需要复杂计算。
一、核心公式
线段上的格点数量 = gcd (横坐标差的绝对值,纵坐标差的绝对值) + 1
公式解释
先计算两点横、纵坐标的绝对差值:
dx = |xₐ - xᵦ|
dy = |yₐ - yᵦ|
求 dx 和 dy 的最大公约数 gcd (dx, dy)
最终答案 = gcd 值 + 1
特殊情况
当两点完全重合(dx=0 且 dy=0)时,gcd=0,答案 = 0+1=1,完全符合题意。
二、思路步骤
读取测试用例数量 T
循环处理每个测试用例:
读取四个坐标:xₐ, yₐ, xᵦ, yᵦ
计算 dx = abs (xₐ - xᵦ),dy = abs (yₐ - yᵦ)
计算 dx 和 dy 的最大公约数 g
答案 = g + 1,输出答案
AC代码
include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while (t--){
int xa,ya,xb,yb;
cin>>xa>>ya>>xb>>yb;
int x=abs(xa-xb),y=abs(ya-yb);
cout<<__gcd(x,y)+1<<endl;
}
return 0;
}
全部评论 1
原代码提交于2026/3/21下午16点半左右
昨天 来自 上海
1




有帮助,赞一个