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

P4820 [国家集训队] 书堆 题解

题意简析

求在保证稳定的前提下,将 \(n\) 本长度为 \(m\) 的书叠放在桌子边缘,最右端伸出桌面的最长长度。

思路解析

物理

理论推演

相信大家在初中物理学习时,一定遇到过经典的“堆叠书本”问题,回顾我们当时的思路我们是如何解决这个问题的?

还记得我们当时的时候在学力学,学力学中的重力。根据牛顿第一定律:

每个物体将保持静止或匀速直线运动,除非有外力改变其运动状态。

发现这里的每一本书都是相对于桌面静止的,那么我们容易对单独一个书本进行受力分析:

这里光有重力显然不平衡,所以显然有向上的支持力。

根据牛顿第三定律:

对于每一个作用力,都会有一个大小相等、方向相反的反作用力。

也就是说其对下面的物体有压力。

但是我们都知道,压力的作用并不好分析,因为它是的本重是弹性形变产生的弹力。那么我们怎么简化呢?

我们想到,我们在做各类科学实验的时候,常常用到一种方法叫做等效替代法,也就是说只要最终效果是一样的,那么我们并不需要去关注中间的过程如何实现的。

就比如说平面镜成像实验中的放在玻璃片后蜡烛,本重上玻璃片后的真实摆放的蜡烛并不是像,但是效果一样,且我们容易观测和测量出距离,所以我们就采用等效替代法来分析。

这里,我们可以把每本书看成一个质点,因为重力和压力的作用效果都一样(压强不一样,但在这道题中与要求的无关,所以可以采用该方法)。


问题转化

我们现在来正式解决问题。

由易入难,先看只放 \(1\) 个的情况:

显然我们把重心刚刚好放在桌面边缘,那么最长的距离就是 \(\frac{m}{2}\)

现在考虑放 \(2\) 个:

还是沿袭之前的思路,我们考虑把这两个书本看成一个整体,那么这个整体的重心应该在桌面的最边缘;考虑把桌面和下面的书本看成一个整体系统,然后最上面的书本依旧是伸出 \(\frac{m}{2}\) 的距离。再考虑下面的书,因为其质量和上方的书是相等的,那么其“权重”就和上面的书一样。根据三角形相似和全等的知识,于是这两本书到整个组合体的重心的距离也应该是相等的。

如图所示,下面的书本就最多伸出 \(\frac{m}{4}\) 的距离。

可能已经有较为明显的规律了,但我们不清楚下面一个是 \(\frac{m}{6}\) 还是 \(\frac{m}{8}\),所以现在考虑放 \(3\) 个:

我们把三本书看成一个整体,系统平衡,重心在桌子的最边缘。继承以前的最优解,把上面的两本书看成一个整体,其质量为是一本书的两本,那么其在组合体中的权重就是 \(2\),而下面那本书的权重是 \(1\)。所以它们到重心的距离是 \(2 : 1\) 的关系,就占到了 \(\frac{m}{2}\)\(\frac{1}{3}\)\(\frac{m}{6}\)

推广到 \(n\) 本书,我们可以得到一定有 \(n-1\) 本书压在 \(1\) 本书上,那么其最长的距离就是 \(\frac{m}{2} \times \frac{1}{(n-1)+1} = \frac{m}{2n}\)

但需要注意的是本题中,正好的情况被看作不稳定,所以要向左移动一个极小值 \(\epsilon\)

数学

考虑如何求和?我们把 \(\frac{m}{2}\) 提出来,发现剩下的式子是:

\[H_n = 1 + \frac{1}{2} + \frac{1}{3} + \cdots + \frac{1}{n} \]

这个东西就是大名鼎鼎的调和级数。这个级数有一个众所周知的性质就是这个级数是发散的,只是增长的比较慢。(也许可以打表?

如果 \(n \le 10^7\),那么直接 \(O(n)\) 计算即可;但是题目中说 \(n \le 10^{18}\) 显然我们需要有 \(O(\log (n))\)\(O(1)\) 做法。

因为调和级数有以下渐进形式:

\[H_n = \ln n + \gamma + \frac{1}{2n} - \frac{1}{12n^2} + \frac{1}{120n^4} - \cdots \]

那么我们考虑到 \(n\) 很大,我们只取到 \(n^4\)。这里的 \(\gamma = 0.57721566490153286 \cdots\)欧拉-马歇罗尼常数

最后再取整数输出即可。时间复杂度为 \(O(n)\)\(O(1)\),空间复杂度 \(O(1)\)

代码实现

#include <bits/stdc++.h>
#define int long long
#define Gamma 0.57721566490153286060651209008240243104215933593992L
using namespace std;
typedef long double ld;
const int MAXN = 1e7;
ld H;
int n, m;
signed main() {cin >> n >> m;if (n <= MAXN) {for (int i = 1; i <= n; ++i) {H += 1.0L / i;}} else {ld N = n;H = logl(N) + Gamma + 1.0L / (2.0L * N) - 1.0L / (12.0L * N * N) +1.0L / (120.0L * N * N * N * N);}cout << (int)((m * H / 2.0L) - 1e-12L);return 0;
}

后记

本文只是运用浅薄的初中物理知识对问题进行了分析,对于调和级数的渐进形式没有证明,这里推荐推广阅读:

欧拉-马歇罗尼常数

调和级数

调和级数——自然真理是如何隐藏在数字中的,永远不要相信直觉

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

相关文章:

  • 【HarmonyOS】DAY13:Flutter电商实战:从零开发注册页面(含密码验证、确认密码完整实现)
  • 例说FPGA:可直接用于工程项目的第一手经验【2.9】
  • 东疆潮汐表查询2026-02-06
  • 中望3D2026摆正实体
  • WebSocket 从入门到实战
  • Windows2008R2 更新 必要补丁 不然不能更新
  • AI产品经理:小白也能掌握的高薪职业,未来5年最值得all in
  • AI大模型技术架构完全指南:从底层硬件到上层应用,8层体系详解,产品经理必备
  • 【防坑指南 | 可以不会不能不懂】现在混动和电动车各有什么优劣?
  • 春晚机器人“顶流”之争:从表演者到实用者的技术跃迁
  • 深入理解 Spring Boot Actuator:构建可观测性与运维友好的应用 - 实践
  • SEW变频器MCH42A0370-503-4-0T 08271682
  • Simple Markdown Editor:重新定义本地化写作体验的纯客户端编辑工具
  • 2026 ESG数据治理与碳成本管控:专业的全面预算管理系统生产厂家口碑排行榜 - 星野科技
  • 基于Java的建筑工程投标项目智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 2026协同效能驱动转型:诚信的全面预算管理系统生产厂家口碑推荐榜 - 星野科技
  • 基于Java的建筑工程监管智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 2026年热门的地源热泵优质厂商精选推荐(口碑) - 品牌宣传支持者
  • 基于Java的建筑工程合同智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的建筑档案智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的建筑工程工程资料智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的建筑涂料污染监管智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • FFmpeg 自定义 AVIOContext + HTTP Range 分段缓存播放器实现(完整实战)
  • 别再让 NaN 和 None 把你搞晕了:谈谈 Python 里的“空值”哲学
  • 基于Java的建筑机械智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 第12章-空间数据库与PostGIS - 实践
  • 2026年可靠的全面预算管理系统公司口碑推荐榜单:五大厂商集成协同实证分析 - 星野科技
  • 基于Java的建筑条款智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 2026可持续财务指南:热门的全面预算管理系统品牌哪家好 - 星野科技
  • 基于Java的建筑布展智慧管理系统的设计与实现全方位解析:附毕设论文+源代码