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

来源:互联网 发布:有没有钢琴软件 编辑:程序博客网 时间:2024/06/11 04:14

Description

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

Input

一个正整数n,表示需要生成一个n排列

Output

一个数表示期望随机次数,保留整数

Sample Input

4

Sample Output

8(.333333…)
【友情提示】
输出样例的括号里表示答案的小数部分,但实际丌要求输出
数学期望=sigma(概率×权值),本题中为期望随机次数=sigma(概率×随机次数)

Data Constraint

30%数据满足n≤3
80%数据满足n≤10^7
100%数据满足n≤2^31

Solution

设x为当前到第i位取到可以取的值的期望次数
设共有n个数(即输入的n)

x=ni+1n+i1n(x+1)

化简得
x=nni+1=n1i

用最右边的等式,把n提出来,答案为

ni=1n1i

ni=11i每隔107打个表,然后暴力就行了

Code

#include<cstdio>#define ll long long#define fo(i,a,b) for(ll i=a;i<=b;i++)#define db double#define N 10000010using namespace std;db a[215]={0,16.695311365860,17.388458521420,17.793923621195,18.081605689480,18.304749238294,18.487070793421,18.641221472058,18.774752863789,18.892535898751,18.997896413853,19.093206593203,19.180217969814,19.260260677167,19.334368649046,19.403361520295,19.467900041224,19.528524662856,19.585683076533,19.639750297657,19.691043591913,19.739833755963,19.786353771490,19.830805533962,19.873365148290,19.914187142727,19.953407855803,19.991148183715,20.027515827820,20.062607147570,20.096508699188,20.129298521957,20.161047220221,20.191818878841,20.221671841946,20.250659378777,20.278830255704,20.306229229854,20.332897476901,20.358872963271,20.384190771223,20.408883383783,20.432980935333,20.456511432715,20.479500950913,20.501973806740,20.523952713435,20.545458918633,20.566512327808,20.587131614990,20.607334322287,20.627136949563,20.646555035402,20.665603230354,20.684295363349,20.702644502000,20.720663007487,20.738362584570,20.755754327267,20.772848760612,20.789655878914,20.806185180852,20.822445701710,20.838446043044,20.854194399999,20.869698586523,20.884966058643,20.900003935996,20.914819021770,20.929417821180,20.943806558622,20.957991193604,20.971977435569,20.985770757692,20.999376409738,21.012799430062,21.026044656803,21.039116738362,21.052020143189,21.064759168959,21.077337951158,21.089760471148,21.102030563733,21.114151924258,21.126128115297,21.137962572937,21.149658612694,21.161219435088,21.172648130905,21.183947686153,21.195120986744,21.206170822925,21.217099893451,21.227910809550,21.238606098661,21.249188207985,21.259659507847,21.270022294877,21.280278795039,21.290431166498,21.300481502347,21.310431833195,21.320284129633,21.330040304574,21.339702215481,21.349271666492,21.358750410442,21.368140150788,21.377442543446,21.386659198546,21.395791682106,21.404841517621,21.413810187600,21.422699135013,21.431509764692,21.440243444657,21.448901507396,21.457485251084,21.465995940748,21.474434809390,21.482803059057,21.491101861869,21.499332361002,21.507495671638,21.515592881867,21.523625053561,21.531593223207,21.539498402711,21.547341580169,21.555123720608,21.562845766699,21.570508639442,21.578113238824,21.585660444456,21.593151116183,21.600586094668,21.607966201962,21.615292242052,21.622565001378,21.629785249349,21.636953738825,21.644071206592,21.651138373812,21.658155946468,21.665124615782,21.672045058624,21.678917937910,21.685743902978,21.692523589961,21.699257622140,21.705946610288,21.712591153005,21.719191837034,21.725749237578,21.732263918597,21.738736433101,21.745167323429,21.751557121526,21.757906349202,21.764215518394,21.770485131405,21.776715681154,21.782907651400,21.789061516973,21.795177743988,21.801256790063,21.807299104517,21.813305128575,21.819275295560,21.825210031078,21.831109753203,21.836974872654,21.842805792963,21.848602910646,21.854366615361,21.860097290068,21.865795311181,21.871461048716,21.877094866432,21.882697121979,21.888268167027,21.893808347401,21.899318003211,21.904797468974,21.910247073740,21.915667141208,21.921057989841,21.926419932981,21.931753278955,21.937058331184,21.942335388283,21.947584744168,21.952806688148,21.958001505023,21.963169475181,21.968310874680,21.973425975345,21.978515044851,21.983578346807,21.988616140835,21.993628682658,21.998616224168,22.003579013508,22.008517295148,22.013431309949,22.018321295242,22.023187484892,22.028030109367,22.032849395801,22.037645568064,22.042418846815,22.047169449573,22.051897590768,22.056603481804,22.061287331115};int main(){    ll n,n1;    scanf("%lld",&n);    n1=n/10000000;    ll ans1=(ll)a[n1];db ans=a[n1]-ans1;    fo(i,n1*10000000+1,n)    {        ans+=1.0/i;        if(ans>1) ans--,ans1++;    }    printf("%.0lf",(ans+ans1)*(db)n);}
1 0
原创粉丝点击