news 2026/4/23 12:10:37

20×21整点网格直线计数之谜(2021年十二届蓝桥杯CC++软件赛省赛 B组)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
20×21整点网格直线计数之谜(2021年十二届蓝桥杯CC++软件赛省赛 B组)

问题描述:

在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上,那么这些点中任意两点确定的直线是同一条。
给定平面上2×3个整点{(x,y)|0≤x<2,0≤y<3,xEZ,yEZ},即横坐标是0到1(包含0和1)之间的整数、纵坐标是0到2(包含0和2)之间的整数的点。这些点一共确定了11条不同的直线。
给定平面上20×21个整点{(x,y)|0≤x<20,0≤y<21,xEz, yEZ},即横坐标是0到19(包含0和19)之间的整数、纵坐标是0到20(包含0和20)之间的整数的点。请问这些点一共确定了多少条不同的直线。

直线的一般式为Ax + By + C = 0,其中A、B、C是整数,且满足:

一.A、B不同时为0

二.A、B、C的最大公约数(GCD)为1(即最简形式)

三.符号规则:A≥0;若A=0,则B≥0

为什么用一般式?

一.能表示所有直线(包括垂直于x轴的直线)
二.用整数表示,避免浮点数精度问题
三.同一直线的一般式唯一,不会出现多种表示方式

斜截式(有局限性)

一.斜截式为y = kx + b,其中k是斜率,b是截距。但:

二.垂直于x轴的直线(x=a)无法用斜截式表示

三.斜率k和截距b可能是无限小数,存储和比较会有精度问题

给定两点P1(x1, y1)P2(x2, y2),如何计算直线的一般式?

1. 向量法推导

向量P1P2 = (x2-x1, y2-y1),直线的法向量为(A, B),满足法向量与P1P2垂直,即:

A*(x2-x1) + B*(y2-y1) = 0

A = y2 - y1B = x1 - x2,则满足垂直条件。再代入点P1的坐标,可得:

C = -(A*x1 + B*y1) = x2*y1 - x1*y2

最终直线的一般式为:

(y2 - y1)x + (x1 - x2)y + (x2*y1 - x1*y2) = 0

直接计算得到的一般式可能不是最简形式,也可能有不同的符号,需要标准化处理:

1. 约分:除以最大公约数
计算A、B、C的最大公约数GCD,然后将A、B、C分别除以GCD:

g = GCD(GCD(|A|, |B|), |C|)
A' = A / g
B' = B / g
C' = C / g
示例:4x + 6y + 8 = 0,GCD(4,6,8)=2,标准化后为 2x + 3y + 4 = 0

2. 统一符号:确保表示一致
如果A' > 0:保持不变
如果A' < 0:将A'、B'、C'同时乘以-1,使得A'≥0
如果A' = 0:确保B' > 0(如果B' < 0,将B'、C'同时乘以-1)


示例:-2x + 4y - 6 = 0,A'=-2<0,乘以-1后为 2x - 4y + 6 = 0,再约分得到 x - 2y + 3 = 0

1. 遍历所有点对的优化
20×21个整点共有420个点,总点对数量为 C(420,2) = 87990

除了斜线,还有两类特殊直线可以单独统计:

1. 垂直线(x = a)

共有20条,a从0到19。一般式为1x + 0y - a = 0,标准化后为(1, 0, -a)

2. 水平线(y = b)

共有21条,b从0到20。一般式为0x + 1y - b = 0,标准化后为(0, 1, -b)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:29:09

老树新生:旧笔记本电脑性能复活全攻略

老树新生&#xff1a;旧笔记本电脑性能复活全攻略 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和改善你的Windows体…

作者头像 李华
网站建设 2026/4/23 13:37:00

基于云开发的微信小程序美食菜谱毕设:高效架构设计与性能优化实践

背景痛点&#xff1a;传统毕设开发中后端搭建、部署、联调的低效问题 毕业设计周期通常只有 8&#xff5e;12 周&#xff0c;时间被开题、答辩、论文切割得七零八落。很多同学把精力花在“让服务跑起来”而不是“把功能做精彩”上&#xff0c;常见卡点有三&#xff1a; 服务器…

作者头像 李华
网站建设 2026/4/23 13:28:57

ChatGPT Scholar技术解析:如何构建高效学术研究助手

ChatGPT Scholar技术解析&#xff1a;如何构建高效学术研究助手 1. 学术研究的核心痛点 文献数量爆炸式增长&#xff0c;单篇综述动辄引用两百篇以上文献&#xff0c;人工阅读耗时且易遗漏关键信息。关键词检索返回结果冗余&#xff0c;传统布尔表达式难以捕捉跨学科隐含关联…

作者头像 李华
网站建设 2026/4/23 12:10:29

ChatTTS实战:如何固定男声/女声音色并优化语音合成效果

ChatTTS实战&#xff1a;如何固定男声/女声音色并优化语音合成效果 背景与痛点 语音合成&#xff08;Text-to-Speech, TTS&#xff09;在智能客服、有声读物、车载导航等场景已不可或缺。然而&#xff0c;在真实业务落地时&#xff0c;开发者常被两个问题困扰&#xff1a; 音…

作者头像 李华
网站建设 2026/4/23 12:10:06

如何实现极速传输:百度网盘秒传技术深度指南

如何实现极速传输&#xff1a;百度网盘秒传技术深度指南 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 在当今数字化时代&#xff0c;文件传输加速…

作者头像 李华
网站建设 2026/4/23 11:36:35

从零开始使用Digital-Logic-Sim进行数字系统设计完全指南

从零开始使用Digital-Logic-Sim进行数字系统设计完全指南 【免费下载链接】Digital-Logic-Sim 项目地址: https://gitcode.com/gh_mirrors/di/Digital-Logic-Sim Digital-Logic-Sim是一款强大的数字逻辑模拟工具&#xff0c;能够帮助开发者从基础逻辑门开始构建复杂的数…

作者头像 李华