博客
关于我
LightOJ - 1077 How Many Points
阅读量:808 次
发布时间:2023-01-31

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

给定两个格点,求它们之间线段上的格点数目。这个问题可以通过计算两个点坐标差的最大公约数(gcd)来解决。具体来说,线段上的格点数目等于gcd(abs(x1-x2), abs(y1-y2)) + 1。

步骤解释:

  • 问题分析:给定两个点 (x1, y1) 和 (x2, y2),我们需要计算连接它们的线段上包含多少个格点。根据贝祖定理,两个点之间的线段上格点数目为它们坐标差的gcd加1。

  • 公式应用:计算两点坐标差的绝对值的gcd,然后加1即可得到结果。公式为:[\text{格点数目} = \text{gcd}(|x1 - x2|, |y1 - y2|) + 1]

  • 编程实现

    • 包含必要的头文件。
    • 定义长长整数类型。
    • 定义gcd函数,使用欧几里得算法。
    • 读取输入,处理每个测试用例,计算并输出结果。
  • 代码示例:

    #include 
    #include
    #include
    #include
    using namespace std;typedef long long LL;LL gcd(LL a, LL b) { return b == 0 ? a : gcd(b, a % b);}int main() { int T; scanf("%d", &T); for (int t = 1; t <= T; t++) { LL x1, y1, x2, y2; scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2); LL dx = abs(x1 - x2); LL dy = abs(y1 - y2); LL g = gcd(dx, dy); printf("Case %d: %lld\n", t, g + 1); } return 0;}

    代码解释:

    • 头文件包含<stdio.h><string.h><iostream><algorithm>,用于基础输入输出和算法支持。
    • 类型定义typedef long long LL; 定义长长整数类型,便于处理大数。
    • gcd函数:使用递归实现欧几里得算法计算最大公约数。
    • 主函数
      • 读取测试用例数目T。
      • 对于每个测试用例,读取四个坐标值。
      • 计算坐标差的绝对值。
      • 使用gcd函数计算最大公约数。
      • 输出结果为gcd值加1。

    这个程序能够高效地解决问题,适用于多个测试用例,并且代码结构清晰,易于理解和维护。

    转载地址:http://dzwfk.baihongyu.com/

    你可能感兴趣的文章
    oracle 逻辑优化,提升高度,综合SQL上下文进行逻辑优化
    查看>>
    oracle 闪回关闭,关闭闪回即disable flashback的操作步骤
    查看>>
    oracle--用户,权限,角色的管理
    查看>>
    oracle00205报错,Oracle控制文件损坏报错场景
    查看>>
    Oracle10g EM乱码之快速解决
    查看>>
    Oracle10g下载地址--多平台下的32位和64位
    查看>>
    Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
    查看>>
    Oracle11G基本操作
    查看>>
    Oracle11g服务详细介绍及哪些服务是必须开启的?
    查看>>
    Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
    查看>>
    oracle12安装软件后安装数据库,然后需要自己配置监听
    查看>>
    Oracle——08PL/SQL简介,基本程序结构和语句
    查看>>
    Oracle——distinct的用法
    查看>>
    Oracle、MySQL、SQL Server架构大对比
    查看>>
    oracle下的OVER(PARTITION BY)函数介绍
    查看>>
    Oracle中DATE数据相减问题
    查看>>
    Oracle中merge into的使用
    查看>>
    oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
    查看>>
    oracle中sql的case语句运用--根据不同条件去排序!
    查看>>
    Oracle中Transate函数的使用
    查看>>