当前位置: 首页 > news >正文

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)

http://www.jsqmd.com/news/352487/

相关文章:

  • macOS网络存储远程连接解决方案:iSCSI技术实现与应用指南
  • 3分钟上手AI视频创作:零基础掌握文本转视频全流程
  • 低成本开源DIY机械臂探索日志:从问题到实践的社区协作之路
  • 告别EFI配置噩梦?这款黑苹果工具让装机效率提升90%
  • 三步搭建轻量级文件服务:Simple HTTP Server实用指南
  • AI图像增强技术:从模糊到清晰的开源解决方案
  • 探索SuperImage:让模糊图像重获新生的AI超分辨率技术
  • 5步解锁钉钉自由打卡:XposedRimetHelper位置模拟全攻略
  • 游戏安装工具与主机管理完全指南:告别复杂操作,轻松掌握PKGi PS3使用技巧
  • Dify边缘配置失效真相(92%开发者忽略的3个YAML陷阱)
  • 终端工具新选择:3步上手Tabby的高效使用指南
  • 为什么头部车企的3个智能座舱项目突然全部切换至Dify?——源自某德系Tier1内部技术白皮书泄露
  • TQRFSOC开发板47DR的Hello World工程:常见问题与解决方案
  • 5步打造Switch游戏直播系统:SysDVR高清串流完全指南
  • 基于Vue3+TypeScript实现阿里云智能客服界面的AI辅助开发实践
  • 内容访问技术新范式:Bypass Paywalls Clean的协同适配与价值重构
  • 2026年手工红糖厂家最新推荐:烘焙专用红糖、甘蔗红糖、甘蔗黄冰糖、优级红糖、养生红糖、原汁红糖、原汁黄冰糖、古法红糖选择指南 - 优质品牌商家
  • 为什么92%的Dify用户没开启Streaming优化?——实时流式响应提速3.8倍的底层协议改造方案
  • Win11系统优化工具深度评测:用Win11Debloat实现空间清理与电脑加速
  • 轻量级静态文件服务器:Simple HTTP Server 使用指南
  • 2026年河南花生种子优质供应商盘点与推荐 - 2026年企业推荐榜
  • 如何解决PS3游戏安装烦恼:PKGi PS3让主机直装成为现实
  • 为什么你的Dify应用上线3天就OOM?20年SRE紧急发布的低代码资源治理5条铁律
  • Three-DXF:浏览器端DXF文件3D可视化解决方案
  • C++语音交互助手开发实战:AI辅助下的高效实现与性能优化
  • 打造惊艳网页动态效果:Fireworks.js视觉增强指南
  • 3个步骤掌握MahApps.Metro导航菜单:从基础到高级应用指南
  • 高效系统优化工具:Win11Debloat深度使用指南
  • 如何用fireworks-js实现网页动态视觉效果?——轻量级Canvas烟花特效探索手记
  • PS3游戏安装与pkg文件管理完全指南:用PKGi PS3提升游戏体验