这题公式很简单
n*(1/n+1/(n - 1) + 1/ (n - 2) +...+ 1/(n - k + 1) )
关键问题来了
n ,k都巨大
然后发现这个是个调和级数求和
数字大的时候只有近似公式
那么试试呗
(1/n+1/(n - 1) + 1/ (n - 2) +...+ 1/(n - k + 1) ) 约等于 log(n + 1) + R
R是欧拉常数
完了k大的时候就用这个公式去搞。不然直接for了
但是wa出翔了
最后发现别人这么干的 本来求出来的公式是log((n + 1) / (n - k + 1))
然后有个函数叫log1p ,是干什么的呢 log1p(x)返回的就是log(x + 1)
但是问题来了,当x巨小的时候,log1p的精度比较高,用log的时候x+1就丢精度了
然后就凑呗,凑着用log1p还不行,分母减个0.5,就是用来调控精度的。
这给我蛋疼的。
完了发现房里好多不用log1p的, 我全给cha掉了
double expectedBuy(string n, string k) { long long x = gao(n); long long y = gao(k); double ans = 0; long long s = x - y + 1; long long mx = 10000000; while(s
查看更多关于SRM400Div1_html/css_WEB-ITnose的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did106085