首页 > 代码库 > BZOJ 2048 题解
BZOJ 2048 题解
2048: [2009国家集训队]书堆
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 1076 Solved: 499
[Submit][Status][Discuss]
Description
Input
第一行正整数 N M
Output
一行(有换行符),L,表示水平延伸最远的整数距离 (不大于答案的最大整数)
Sample Input
样例
#1
Input: 1 100
Output: 49
#2
Input: 2 100
Output: 74
#1
Input: 1 100
Output: 49
#2
Input: 2 100
Output: 74
Sample Output
N <= 10^18
数据保证答案 < 10^6
数据保证答案 < 10^6
————————————————————————————
物理题:
从最上一本书考虑,当重心落在下一本书的边缘,由于力矩平衡,恰好不落下。
两本书整体根据力矩平衡,重心左移m/4距离。
两本书整体根据力矩平衡,重心左移m/6距离。
两本书整体质心根据力矩平衡,重心左移m/8距离。
于是现在题目求( m/2 + m/4 + m/6 + m/8 + ... + m/m ) ,不难发现,这道题与调和级数有关。
根据上述公式,代码如下:
/************************************************************** Problem: 2048 User: shadowland Language: C++ Result: Accepted Time:0 ms Memory:1300 kb****************************************************************/ #include "bits/stdc++.h" using namespace std ;typedef long long QAQ ;typedef double db ;const db Euler_const = 0.5772156649015328606065120900824024310421593359 ; const db eps = 1e-10 ; int main ( ) { db tmp = 0.0000 , N , M ; cin >> N >> M ; if ( N <= 1e4 ) for ( int i=1 ; i<=N ; ++i ) tmp += ( 1.000 / ( db ) i ) ; else tmp = log ( N + 1.000 ) + Euler_const ; tmp *= ( M * 0.500 ) ; cout << ( QAQ ) ceil ( tmp - 1 ) << endl ; return 0 ; }
2016-10-29 00:56:53
BZOJ 2048 题解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。