恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

UVa 1549 Lattice Point

  • 首页
  • 资讯中心
  • /
  • UVa 1549 Lattice Point

相关资讯

像素越小画质越差?神经ISP说:0.35μm也能分辨率翻倍 2026/9/2 15:23:24
车载新诊断框架SOVD---SOVD服务器自动发现机制 2026/9/2 15:23:24
AI数据中心核心技术架构解析:从算力网络到液冷设计的工程实践 2026/9/2 15:18:23

最新资讯

视觉算法边缘设备落地整理
最好最差法BWM权重分析结果解读:一致性比率与最优权重
主成分分析结果解读:特征值、方差贡献率与载荷矩阵
Django + Vue + 微信小程序校园失物招领平台:失物发布、拾物认领与后台管理一体化实现(源码免费领取63519)
Vue 3 + TypeScript 实战:从组件类型到泛型应用全解析
文献 生物完整性指数IBIm改善淡水生态系统评估

今日推荐

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案
用Python搭建搞笑语音助手:从语音识别到语音合成全教程
ROS2阿克曼底盘仿真:从运动学原理到Nav2导航集成实践

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

UVa 1549 Lattice Point

发布时间:2026/9/2 15:23:24
UVa 1549 Lattice Point 题目描述格点是指在二维xyxyxy平面中坐标(x,y)(x, y)(x,y)均为整数的点。定义集合P(r){(x,y)∣x2y2≤r2, (x,y) 为平面上的格点} P(r)\{(x,y)\mid x^2y^2\le r^2,\ (x,y)\text{ 为平面上的格点}\}P(r){(x,y)∣x2y2≤r2,(x,y)为平面上的格点}并用D(r)D(r)D(r)表示P(r)P(r)P(r)中元素的个数。已知当rrr较大时D(r)D(r)D(r)与圆面积πr2\pi r^2πr2有如下关系lim⁡r→∞D(r)r2π \lim_{r\to\infty}\frac{D(r)}{r^2}\pir→∞lim​r2D(r)​π因此若能快速算出较大整数rrr对应的D(r)D(r)D(r)就可用来估计π\piπ的值。题目要求对于给定的若干整数nkn_knk​1≤nk≤1081\le n_k\le 10^81≤nk​≤108输出nkn_knk​及其对应的D(nk)D(n_k)D(nk​)。输入格式输入文件包含多行每行一个整数nkn_knk​1≤nk≤1081\le n_k\le 10^81≤nk​≤108。输出格式对于第kkk个输入整数nkn_knk​先在第2k−12k-12k−1行输出nkn_knk​再在第2k2k2k行输出D(nk)D(n_k)D(nk​)。样例输入1 2 3 10000 10000000输出1 5 2 13 3 29 10000 314159053 100000000 31415926535867961题目分析直接枚举所有格点检查是否落在圆内时间复杂度为O(r2)O(r^2)O(r2)对于r108r10^8r108完全不可行。我们需要利用圆的对称性和整数运算来加速。由于圆关于xxx轴、yyy轴以及原点都对称我们可以只统计第一象限含坐标轴的格点数再通过对称性乘以444并调整原点计数。具体地对于x0x0x0且y0y0y0的点每个点对应四个对称点(±x,±y)(\pm x,\pm y)(±x,±y)共444个。坐标轴上的非原点格点共有4⌊r⌋4\lfloor r\rfloor4⌊r⌋个(±x,0)(\pm x,0)(±x,0)和(0,±x)(0,\pm x)(0,±x)x1…⌊r⌋x1\dots\lfloor r\rfloorx1…⌊r⌋。原点单独111个。因此D(r)14⌊r⌋4∑x1⌊r⌋⌊r2−x2⌋ D(r)14\lfloor r\rfloor4\sum_{x1}^{\lfloor r\rfloor}\left\lfloor\sqrt{r^2-x^2}\right\rfloorD(r)14⌊r⌋4x1∑⌊r⌋​⌊r2−x2​⌋当rrr为整数时⌊r⌋r\lfloor r\rfloorr⌊r⌋r上式为D(r)14r4∑x1r⌊r2−x2⌋ D(r)14r4\sum_{x1}^{r}\left\lfloor\sqrt{r^2-x^2}\right\rfloorD(r)14r4x1∑r​⌊r2−x2​⌋其中当xrxrxr时根号下为000该项为000所以也可以只加到r−1r-1r−1但统一加到rrr不影响结果。问题的关键转化为快速计算S(r)∑x1r⌊r2−x2⌋ S(r)\sum_{x1}^{r}\left\lfloor\sqrt{r^2-x^2}\right\rfloorS(r)x1∑r​⌊r2−x2​⌋若直接对每个xxx使用浮点数开平方r2r^2r2最大可达101610^{16}1016双精度浮点数无法精确表示所有整数会导致舍入误差。因此必须采用整数方法。解题思路注意到当xxx从111增大到rrr时⌊r2−x2⌋\left\lfloor\sqrt{r^2-x^2}\right\rfloor⌊r2−x2​⌋是单调不增的。我们设yryryr然后从x1x1x1开始遍历。对于每个xxx我们不断减小yyy直到满足y2x2≤r2y^2x^2\le r^2y2x2≤r2此时yyy就是要求的⌊r2−x2⌋\left\lfloor\sqrt{r^2-x^2}\right\rfloor⌊r2−x2​⌋。然后将yyy累加到S(r)S(r)S(r)中。因为yyy在遍历过程中只会减小且每次最多减小111总共减小的次数不超过rrr次。因此整个循环的时间复杂度为O(r)O(r)O(r)空间复杂度为O(1)O(1)O(1)。下面验证算法的正确性。初始时x1x1x1yryryr。显然r21r2r^21r^2r21r2所以yyy会不断减小直到满足不等式。当xxx增大时r2−x2r^2-x^2r2−x2变小所以满足条件的最大yyy不会增大因此yyy的单调性得到保证利用双指针一个指针xxx递增一个指针yyy递减可以线性完成。最后将S(r)S(r)S(r)代入公式即可得到D(r)D(r)D(r)。对于输入中每个nnn独立调用该函数计算。代码实现// Lattice Point// UVa ID: 1549// Verdict: Accepted// Submission Date: 2026-06-20// UVa Run Time: 0.000s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 计算 D(r)r 为非负整数longlongcountLatticePoints(longlongr){if(r0)return1;longlongr2r*r;longlongyr;longlongsum0;for(longlongx1;xr;x){while(y*yx*xr2)--y;// 调整 y 使 (x,y) 在圆内sumy;// 累加该列上格点数y1..floor(sqrt(...))}// 原点1个 坐标轴上4r个 四个象限内4*sum个return14*r4*sum;}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);longlongn;while(cinn){coutn\n;coutcountLatticePoints(n)\n;}return0;}总结本题的核心在于利用对称性将四象限计数转化为第一象限求和并利用整数递推避免浮点精度问题将O(r2)O(r^2)O(r2)的暴力枚举优化为O(r)O(r)O(r)的线性扫描。关键技巧是维护一个单调递减的yyy指针使得每一列的yyy值均可通过O(1)O(1)O(1)次调整得到。该方法在r108r10^8r108时循环次数约为2×1082\times 10^82×108次简单整数比较与加减在合理时间内可完成。本题还体现了数学推导与算法优化的结合是计数类问题的常用思路。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号