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/n ) ,不难发现,这道题与调和级数有关。
根据上述公式,代码如下:
/************************************************************** 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