HDOJ 5984 Pocky【2016青岛现场赛】【数学】

其实这个题可以用看数据样例的方法来猜!!!!!!

(不然现场赛几分钟就过了这个题是怎么过的)


先说说题意:有一个长为L的巧克力,我们每次随机的选择一个分割点,将其分成两块,左边的一块吃掉,右边的一块留着,继续分割。

直到剩下的长度不超过D为止。求分割次数的期望


先说说正解:

当L<=D时,一开始分解不了,所以答案是0

当L>D时,分两类情况:

第一种情况,只能分解一次:取的大小超过了L-D

第二种情况:与当前取的值有关

接下来就需要数学队友来个微积分:得到答案为1+ln(L/D)

吐槽一下弱弱的自己:不知道ln怎么打!!!!其实在C++中就是log。。。。



代码就是这样咯:

#include<bits/stdc++.h>
using namespace std;

const double eps=1e-6;
double a,b,ans;
int n;

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lf%lf",&a,&b);
        if (a<=b+eps) puts("0.000000");
        else printf("%.6lf\n",1.0+log(a/b));
    }
    return 0;
}


怎么猜:

首先看数据:

2.0和1.0

4.0和1.0

8.0和1.0

这些除了1,小数的值是翻倍的!

再看到2.0和1.0,后面那个位数好熟悉啊!不就是ln2吗!

所以此时就知道答案与ln有关

再用7.0和3.0检验一发,卧槽,这个题怎么这么水?!

(这个之后赛后自己YY的,但是其实赛场上有大神就是这么做的)


所以:提供几个数学值放在这儿:

log10(2):0.301030
log10(3):0.477121
log10(5):0.698970
log10(7):0.845098
ln(2):0.693147
ln(3):1.098612
ln(5):1.609438
ln(7):1.945910

比如要算log10(6):

因为知道log10(2)和log10(3):所以加起来就知道了log10(6)=0.778151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值