20140711 loop-II 调和数列

首先对于点x与点y 若他们之间有一条又向边

则可将他们两个当作一个点处理

 

只有一个点时 期望环的个数为1

对于有n个点时

点x有 1/n 的概率形成1个环 期望值为 1/n

若点x与其他顶点y相连 相连过后即只剩 n-1 个顶点

对于剩下的 n-1 个点

又有 1/(n-1) 的概率形成1个环 期望值为 1/(n-1)

所以总的期望值为 1+1/2+1/3......1/n

对于n<=5000000的数据直接 O(n) 求值

对于大数据 ans=ln(n)+euler (euler为欧拉常数)

 1 #include <cstdio>
 2 #include <cmath>
 3 using namespace std;
 4 #define EPS 11e-10
 5 #define euler 0.57721566490
 6 typedef long long LL;
 7 
 8 LL n,m;
 9 
10 int main() {
11     scanf("%lld%lld",&n,&m);
12     if (n<=5000000) {
13         double ans=0.0;
14         for (LL i=1;i<=n;i++) ans+=1.0/double(i);
15         ans=ans*double(m);
16         printf("%d",(int)floor(ans-EPS));
17     }
18     else printf("%d",(int)floor((log(n)+euler)*m-EPS));
19 }
View Code

 

转载于:https://www.cnblogs.com/fjmmm/p/3838424.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值