BZOJ 2048 题解

Posted struct Edge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

Sample Output

N <= 10^18
数据保证答案 < 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 ;  
} 
View Code

 

2016-10-29 00:56:53

 
 
 
 
 
 
 
 
 
 
 
 

以上是关于BZOJ 2048 题解的主要内容,如果未能解决你的问题,请参考以下文章

bzoj2048[2009国家集训队]书堆 数论

BZOJ2339HNOI2011卡农

2021-05-237-3 模拟2048游戏--单行向左移动叠加 个人题解

2021-05-237-3 模拟2048游戏--单行向左移动叠加 个人题解

2021-05-237-3 模拟2048游戏--单行向左移动叠加 个人题解

2021-05-237-3 模拟2048游戏--单行向左移动叠加 个人题解