题目描述

让N本密度均匀的相同的书摆在桌上。最下面的摆在桌子边缘,其他的书依次堆叠在一本书上。每本书都只能水平放置,宽必须垂直于桌子边缘。如(洛谷的)图:

求书本最右能到多远(这个距离是指最右边的书的右端点-桌子的右边缘),同时不让书因为重力垮下来。每本书的长度为M,最大化L。

当然是在“理想状态”下。即不考虑地球自转,重力系数改变,书的形变。

但是如果某本书以上的所有书的重心的竖直射影不在这本书上,或者正好落在在这本书的边界上,那么这堆书是不稳定的,会因为重力而垮下来。

输出延伸最远的距离向下取整。

\(N\le 10^{18}\),保证答案\(<10^6\)。

题意分析

这道题前不久我的物理老师\(\times5\)大人给我们讲过!

首先确定递推的方向应该是从上往下,否则上面的会影响下面的书的重心。

(以下默认长度为1)

n=1,\(\frac12\),下面的书的右端点对齐上面的书的重心。

n=2,\(\frac12+\frac14=\frac34\),第三本书对齐前两本书的重心。

n=3,\(\frac12+\frac14+\frac16=\frac{11}{12}\),第四本书对齐前三本书的重心距离。

\(\dots\)

然后就发现答案是

\[\frac12+\frac14+\frac16+\frac18+\dots+\frac1{2i}\\
=\sum_{i=1}^n\frac1{2i}
\]

注意以上考虑的是重心正好落在了下一本书的边缘上。而题目中说了,正好落在边界上是不稳定的!所以要减去一个极小的数,当作是那个\(\varepsilon\)就好。

但是这不可能通过\(N\le10^{18}\)的数据的。

如果您在这个地方发现有的点是WA的话,请检查您有没有开\(\texttt{long long}\)哦~

for(LL i=1;i<=n;i++) ans+=0.5/i;
cout<<(LL)(ans*m-(1e-6));

这样大概可以做到\(10^9\),您就可以获得\(36pts\)的好成绩!

考虑在数学方面搞点文章。

可以发现这个东西就是调和级数\(H(x)\div2\)而来的

又因为\(H(x)\)和\(\ln(x)\)特别特别的相近(\(\lim_{x\to\infty}\))

第n个调和数与n的自然对数自然对数的差值收敛于欧拉常数。

\[\sum_{i=1}^n\frac1k-\ln n=\gamma
\]
\[\gamma=\int_1^n\left(\frac1{\lfloor x \rfloor}-\frac1x\right)dx\thickapprox 0.57721 56649 01532 86060 65120 90082 40243 10421 59335
\]

所以对于很大的\(n\)我们只要计算\(\ln(n)+0.5772156649\dots\)即可。

Code

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define IL inline
#define re register
#define LL long long
#define ULL unsigned long long
#define debug printf("Now is %d\n",__LINE__);
using namespace std; inline LL read()
{
LL x=0,fu=1;
char ch=getchar();
while(!isdigit(ch)&&ch!='-') ch=getchar();
if(ch=='-') fu=-1,ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*fu;
} double ans;
LL n,m;
int main()
{
n=read();
m=read();
if(n>100000000) cout<<(LL)(m*(log(n)+0.5772156649)/2-(1e-6))<<endl;
else
{
for(LL i=1;i<=n;i++) ans+=0.5/i;
cout<<(LL)(ans*m-(1e-6))<<endl;
}
return 0;
}

洛谷 P4820 [国家集训队]书堆的更多相关文章

  1. 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)

    洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...

  2. [洛谷P1527] [国家集训队]矩阵乘法

    洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...

  3. 洛谷P1501 [国家集训队]Tree II(LCT,Splay)

    洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2...... ...

  4. 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)

    洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...

  5. 洛谷 P1407 [国家集训队]稳定婚姻 解题报告

    P1407 [国家集训队]稳定婚姻 题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的 ...

  6. 洛谷 P1852 [国家集训队]跳跳棋 解题报告

    P1852 [国家集训队]跳跳棋 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在\(a\),\(b\), ...

  7. 洛谷 P1501 [国家集训队]Tree II 解题报告

    P1501 [国家集训队]Tree II 题目描述 一棵\(n\)个点的树,每个点的初始权值为\(1\).对于这棵树有\(q\)个操作,每个操作为以下四种操作之一: + u v c:将\(u\)到\( ...

  8. 洛谷 P2757 [国家集训队]等差子序列 解题报告

    P2757 [国家集训队]等差子序列 题目描述 给一个\(1\)到\(N\)的排列\(\{A_i\}\),询问是否存在 \[1 \le p_1<p_2<p_3<p_4<p_5& ...

  9. 洛谷 P1505 [国家集训队]旅游 解题报告

    P1505 [国家集训队]旅游 题目描述 \(\tt{Ray}\) 乐忠于旅游,这次他来到了\(T\)城.\(T\)城是一个水上城市,一共有 \(N\) 个景点,有些景点之间会用一座桥连接.为了方便游 ...

  10. 洛谷 P1527 [国家集训队]矩阵乘法 解题报告

    P1527 [国家集训队]矩阵乘法 题目描述 给你一个\(N*N\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(K\)小数. 输入输出格式 输入格式: 第一行两个数\(N,Q\),表示矩阵大 ...

随机推荐

  1. Python 潮流周刊#92:一张 Python 软件包的地图(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  2. redmine 迁移后邮箱配置

    https://blog.csdn.net/love8753/article/details/126380927 步骤一 修改配置文件 步骤二 redmine 页面配置信息 步骤一 修改配置文件 打开 ...

  3. 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统

    我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户. 随时近来 AI 大模型的火热,越来越多 ...

  4. k8s报错Error: template: nvidia-device-plugin/templates/gfd.yml:22:19: executing "nvidia-device-plugin/templates/gfd.yml" at <.Subcharts.gfd>: nil pointer evaluating interface {}.gfd

    前言 在安装 kubernetes 插件 k8s-device-plugin时,报错: Error: template: nvidia-device-plugin/templates/gfd.yml: ...

  5. laravel The Process class relies on proc_open, which is not available on your PHP installation.

    解决办法: 在php.ini中,找到disable_functions选项,看看后面是否有proc_open函数被禁用了,去掉proc_get_status,proc_open即可

  6. Python实现PDF转换文件格式

    最近工作中经常遇到收到其他人提供的pdf文档,想要编辑修改下或者复制部分内容比较困难,想通过现有的pdf工具软件转换文档格式,基本都要充钱,为了免费实现pdf转换工具,网上查了下相关技术方案,整理了下 ...

  7. Win环境下的批处理命令和JScript脚本结合使用笔记

    最近工作有接触到.bat 批处理命令,在Win环境下编写的时候基于以前的编码习惯,觉得批处理语法可读性较差,于是学习了解了一下结合JScript的用法,特此记录. 什么是JScript JScript ...

  8. mvc api 下载文件问题

    背景:前后端分离项目,文件下载 项目中 因为实际文件名和路径里的文件名 不一致(一般路径文件名需要使用唯一名字) 刚开始使用返回链接的方式,会出现图片直接预览,文件名会以路径文件名下载,用户体验不好. ...

  9. [源码系列:手写spring] IOC第十二节:FactoryBean

    内容介绍 在 Spring 框架中,FactoryBean 是一个特殊的工厂类接口,用于创建和管理复杂的 bean 对象.它允许你自定义 bean 的创建逻辑,并且可以在 bean 创建过程中执行一些 ...

  10. 阿里云域名+Github配置Pages

    最近用Flutter开发了一个新的应用,准备上架AppStore的时候遇到一个问题,就是通过什么途经能把自己的隐私html和官网html通过链接都显示出来呢? 经过一番的查找和研究后就准备用Githu ...