BZOJ 2048 2009国家集训队 书堆 数学算法
题目大意:经典的物理上的桌边堆书问题,初中物理老师以前还讲过,只是仅仅记住了结论。
。
。
没关系,简单证明一下就好
首先我们设由上至下第i本书比它以下那本书多伸出去的长度为a[i],前缀和为s[i],那么我们要求的就是s[n]
为了简化问题我们设一本书的长度为1
如果n=1
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUG9Qb1FRUQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
a[1]=1/2,毫无疑义
然后考虑两本书
两本书的时候,重心明显在距以下那本书左端点的3/4处,故a[2]=1-3/4=1/4
好的我知道了。第一本是1/2,第二本是1/4。那么第三本就是1/8!
这样想的同学都仅仅过了例子。
我们考虑三本书的情况
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUG9Qb1FRUQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
这个是怎么算的呢?
首先先算三本书的重心距第三本书左端点的距离
第一本书的重心为1/4 + 1/2 + 1/2
第二本书的重心为1/4 + 1/2
第三本书的重心为 1/2
于是我们能够得到三本书的重心位置为(1/4*2+1/2+1/2*3)/3=1/2*2/3+1/2
于是a[3]=1-(1/2*2/3+1/2)=1/2-1/2*2/3=1/2*(1-2/3)=1/2*1/3=1/6
然后四本书的情况就不用多说了吧
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUG9Qb1FRUQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
讨论四本书的重心距第四本书左端点的距离
第一本书的重心位置为:1/6 + 1/4 + 1/2 + 1/2
第二本书的重心位置为:1/6 + 1/4 + 1/2
第三本书的重心位置为:1/6 + 1/2
第四本书的重心位置为: 1/2
于是四本书重心位置为(1/6*3+1/4*2+1/2+1/2*4)/4=1/2*3/4+1/2
a[4]=1-(1/2*3/4+1/2)=1/2-1/2*3/4=1/2*(1-3/4)=1/2*1/4=1/8
以此类推,我们有a[i]=1/2i
那么这个东西怎么求和呢?n<=10^18,O(n)肯定是不现实的
我们考虑调和级数极限公式
lim(n->+∞)1/1+1/2+1/3+...+1/n = ln(n+1)+r
当中r为欧拉常数 近似值约为0.57721566490153286060651209
但这是极限公式 对于n比較小的情况误差会比較大 所以当n比較小的时候O(n)暴力出解 n比較大的时候套用公式
分界线理论上O(n)能过去即可 1000W左右就能够 可是这题精度实在太低 所以1W就能过去 0MS出解
然后就水过去了。
。
。
一不小心手贱压了下代码 然后就RANK1了。。
。
此外100%达成 补番去了
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define eps 1e-10
#define r 0.5772156649
using namespace std;
typedef long long ll;
ll n,m;
double ans;
int main()
{
int i;
cin>>n>>m;
if(n<=10000)
for(i=1;i<=n;i++)
ans+=0.5/i;
else
ans=log(n+1.0)+r,ans/=2.0;
ans*=m;
printf("%d\n",(int)(ans-eps) );
}
BZOJ 2048 2009国家集训队 书堆 数学算法的更多相关文章
- [BZOJ 2048] [2009国家集训队]书堆 【调和级数】
题目链接:BZOJ - 2048 题目分析 只有一本书时,这本书的重心落在桌子边缘上,伸出桌面的长度就是 1/2. 有两本书时,第一本书的重心就落在第二本书的边缘上,两本书的重心落在桌子边缘上,两本书 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子
二次联通门 : BZOJ 2038: [2009国家集训队]小Z的袜子 /* BZOJ 2038: [2009国家集训队]小Z的袜子 莫队经典题 但是我并不认为此题适合入门.. Answer = ∑ ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7676 Solved: 3509[Subm ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- BZOJ 2039: [2009国家集训队]employ人员雇佣
2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1369 Solved: 667[Submit ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
随机推荐
- MVC系列学习(七)-模板页
1.新建一个MVC项目,选择基本 2.查看文件 看到VS为我们生成了一些东西 布局页面,Layout 指定了模板页 3.开始实例 首先控制器中的代码如下: 视图中代码如下: 1.在/Views/_Vi ...
- node or gulp 使用
##MAC 升级node.js的方法 ###第一步,先查看本机node.js版本: $ node -v ###第二步,清除node.js的cache: $ sudo npm cache clean - ...
- 基于TensorFlow的车牌号识别系统
简介 过去几周我一直在涉足深度学习领域,尤其是卷积神经网络模型.最近,谷歌围绕街景多位数字识别技术发布了一篇不错的paper.该文章描述了一个用于提取街景门牌号的单个端到端神经网络系统.然后,作者阐述 ...
- DECLARE_DYNAMIC
DECLARE_DYNAMIC(class_name) DECLARE_DYNCREATE 包含了DECLARE_DYNAMIC的功能,并且可以在运行过程中动态创建对象.如果需要动态创建类对象,需要使 ...
- Sping bean的作用域
单例(Singleton):在整个应用中,只创建bean的一个实例.(默认) 原型(Prototype):每次注入或者通过Sping应用上下文获取的时候,都会创建一个新的bean. 回话(Sessio ...
- SVN的一些操作
一丶 .csproj文件夹必须提交 Revert Changes 撤销
- form:input 标签使用
<form:input path="suplier" htmlEscape="false" maxlength="50" id=&qu ...
- python合并多个txt文件成为一个文件
#coding=utf-8 import os import os.path #文件夹遍历函数 #获取目标文件夹的路径 filedir = './data/click_data' #获取当前文件夹中的 ...
- Problem 21
Problem 21 https://projecteuler.net/problem=21 Let d(n) be defined as the sum of proper divisors of ...
- C语言考试
1.如何定义一个占用空间为0的变量 2.c++如何在指定内存区域创建对象 3.gcc动态库如何调用宿主执行文件的函数,阐述动态链接库的两种加载方式 4.static有什么用处 5.阐述do{...}w ...