您的位置:首页 > 编程语言

{题解}[jzoj3885]【长郡NOIP2014模拟10.22】搞笑的代码

2017-01-19 17:52 232 查看
传送门

Analysis

其实吧 出题人已经够友善啦



出题人已经把方程给了 我们尝试写出来

设f(i)为生成i排列的期望次数

f(i)=[(f(i−1)+1)∗n−in]+[(f(i)+1)∗in]

随便化简一下

我们发现f[i]=f(i−1)+nn−i

这样的时间是O(n)的

涨姿势 欧拉常数+ln(i)约等于原式中的调和级数

因为精度不卡

所以说…

Code

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define oo 2139062143
using namespace std;
const double Eule = 0.57721566490153286060651209;
double ans;
long long n;
int main()
{
scanf("%lld", &n);
ans = 0;
if (n <= 10000000)
{
for (long long i = 1;i <= n;i ++)
ans += (double)1 / (double)(i);
}
else
ans = log((double)n) + Eule;
printf("%.0lf", ans * n);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: