[BZOJ2048] [2009国家集训队] 书堆
Description

Input
第一行正整数 N M
Output
一行(有换行符),L,表示水平延伸最远的整数距离 (不大于答案的最大整数)
Sample Input
#1
1 100
#2
2 100
1 100
#2
2 100
Sample Output
#1
49
#2
74
HINT
N <= 10^18
数据保证答案 < 10^6
Source
By 何朴藩
Solution
好~~~严谨的物理题。画一下图就会发现最上面的书可以露出1/2(指相对它下面的那本书,下同),第二本书可以露出1/3,第三本书可以露出1/4,等等。

1 #include <cmath> 2 #include <iostream> 3 using namespace std; 4 int main() 5 { 6 long long n, m; 7 double ans = 0; 8 cin >> n >> m; 9 if(n <= 200000LL) 10 for(long long i = 1; i <= n; i++) 11 ans += 1.0 * m / (i * 2); 12 else 13 ans = m * (log(1.0 * n + 1) + 0.5772156649015329) / 2; 14 cout << (int)ceil(ans) - 1 << endl; 15 return 0; 16 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步