JZOJ3885. 【长郡NOIP2014模拟10.22】搞笑的代码

Description

在OI界存在着一位传奇选手——QQ,他总是以风格迥异的搞笑代码受世人围观
某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据
while 序列长度

分析

fi 表示当长度为i的时候的期望。
在i这个时候,有 in 的概率与之前选的数重复,
那么,就有 nin 的概率与之前选的数不重复。
所以 fi=in(fi+1)+nin(fi1+1)
通过解方程的思想,得到 fi=nni+fi1
因为n非常大,
所以,我们每10000000记录一下 11+12+13+...

code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <cmath>
#include <math.h> 
using namespace std;
double z[215]={0,16.6953113658599,17.3884585214198,17.7939236211946,18.0816056894797,18.3047492382940,
18.4870707934212,18.6412214720580,18.7747528637897,18.8925358987516,18.9978964138539,
19.0932065932037,19.1802179698145,19.2602606771676,19.3343686490465,19.4033615202954,
19.4679000412246,19.5285246628573,19.5856830765338,19.6397502976579,19.6910435919139,
19.7398337559642,19.7863537714909,19.8308055339629,19.8733651482911,19.9141871427281,
19.9534078558044,19.9911481837160,20.0275158278208,20.0626071475705,20.0965086991887,
20.1292985219579,20.1610472202221,20.1918188788415,20.2216718419466,20.2506593787778,
20.2788302557049,20.3062292298554,20.3328974769020,20.3588729632716,20.3841907712238,
20.4088833837837,20.4329809353337,20.4565114327162,20.4795009509145,20.5019738067413,
20.5239527134359,20.5454589186337,20.5665123278094,20.5871316149909,20.6073343222880,
20.6271369495646,20.6465550354028,20.6656032303554,20.6842953633501,20.7026445020014,
20.7206630074879,20.7383625845716,20.7557543272683,20.7728487606130,20.7896558789153,
20.8061851808528,20.8224457017114,20.8384460430450,20.8541944000008,20.8696985865247,
20.8849660586439,20.9000039359971,20.9148190217713,20.9294178211818,20.9438065586235,
20.9579911936054,20.9719774355704,20.9857707576932,20.9993764097397,21.0127994300628,
21.0260446568041,21.0391167383629,21.0520201431905,21.0647591689598,21.0773379511587,
21.0897604711496,21.1020305637339,21.1141519242589,21.1261281152984,21.1379625729384,
21.1496586126948,21.1612194350892,21.1726481309062,21.1839476861538,21.1951209867457,
21.2061708229262,21.2170998934524,21.2279108095507,21.2386060986618,21.2491882079867,
21.2596595078485,21.2700222948787,21.2802787950406,21.2904311664995,21.3004815023479,
21.3104318331962,21.3202841296343,21.3300403045749,21.3397022154820,21.3492716664936,
21.3587504104436,21.3681401507891,21.3774425434471,21.3866591985477,21.3957916821068,
21.4048415176227,21.4138101876014,21.4226991350147,21.4315097646930,21.4402434446579,
21.4489015073973,21.4574852510850,21.4659959407493,21.4744348093916,21.4828030590586,
21.4911018618698,21.4993323610030,21.5074956716388,21.5155928818681,21.5236250535622,
21.5315932232082,21.5394984027122,21.5473415801701,21.5551237206091,21.5628457667001,
21.5705086394427,21.5781132388250,21.5856604444576,21.5931511161839,21.6005860946687,
21.6079662019636,21.6152922420530,21.6225650013794,21.6297852493503,21.6369537388263,
21.6440712065926,21.6511383738132,21.6581559464694,21.6651246157831,21.6720450586253,
21.6789179379107,21.6857439029787,21.6925235899618,21.6992576221409,21.7059466102895,
21.7125911530059,21.7191918370351,21.7257492375791,21.7322639185982,21.7387364331017,
21.7451673234299,21.7515571215266,21.7579063492033,21.7642155183946,21.7704851314062,
21.7767156811549,21.7829076514009,21.7890615169734,21.7951777439889,21.8012567900635,
21.8072991045176,21.8133051285760,21.8192752955607,21.8252100310788,21.8311097532042,
21.8369748726549,21.8428057929640,21.8486029106467,21.8543666153618,21.8600972900691,
21.8657953111821,21.8714610487162,21.8770948664329,21.8826971219800,21.8882681670279,
21.8938083474019,21.8993180032114,21.9047974689745,21.9102470737406,21.9156671412085,
21.9210579898419,21.9264199329818,21.9317532789558,21.9370583311841,21.9423353882835,
21.9475847441683,21.9528066881481,21.9580015050238,21.9631694751809,21.9683108746800,
21.9734259753455,21.9785150448517,21.9835783468069,21.9886161408356,21.9936286826579,
21.9986162241677,22.0035790135086,22.0085172951480,22.0134313099492,22.0183212952422,
22.0231874848922,22.0280301093668,22.0328493958016,22.0376455680639,22.0424188468154,
22.0471694495729,22.0518975907677,22.0566034818040,22.0612873311154};
long double ans,j;
long long n;
int main()
{
    scanf("%lld",&n);
    ans=z[n/10000000];
    for(long long i=n/10000000*10000000+1;i<=n;i++)
    {
        j=i;
        ans+=1/j;
    }
    ans=ans*n;
    printf("%.0lf",double(ans));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值