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

题目

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

while 序列长度<n do
{
随机生成一个整数属亍[1,n]
如果这个数没有出现过则加入序列尾
}

聪明的同学一定发现了,这样生成数据是徆慢的,那么请你告诉QQ,生成一个n排列的期望随机次数。

分析

相信答案的式子是能推出来的:
\[answer=1+\sum_{i=1}^{n-1}\sum_{g=1}^{\infty}(g*\dfrac{n-i}{n}*(\dfrac{i}{n})^{g-1})\]
\(S_i=\sum_{g=0}^{\infty}(\dfrac{n-i}{n}*(\dfrac{i}{n})^{g}),q=\dfrac{i}{n},a=\dfrac{n-i}{n}\)
\[answer=1+\sum_{i=1}^{n-1}\sum_{g=0}^{\infty}(S_iq^g)\]
等比数列求和\(S=\dfrac{a}{1-q}=1\)
\[answer=1+\sum_{i=1}^{n-1}\sum_{g=0}^{\infty}(q^g)\]
同样等比数列求和\(answer=1+\sum_{i=1}^{n-1}(\dfrac{n}{n-i})\)
\[answer=\sum_{i=0}^{n-1}(\dfrac{n}{n-i})\]
\[answer=n\sum_{i=0}^{n-1}(\dfrac{1}{n-i})\]
接着!!!!
打表:每一千万记录这个区间的和。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const long long maxlongint=2147483647;
const int mo=1000000007;
const long long N=221;
const long long up=10000000;
using namespace std;
double ans;
long long n;
double a[N]=
{
0,16.695311365856710,0.693147155559905,0.405465099774798,0.287682068285136,0.223143548814207,0.182321555127268,0.154150678636781,0.133531391731670,0.117783034961926,0.105360515102263,
0.095310179349784,0.087011376610848,0.080042707353017,0.074107971878989,0.068992871248854,0.064538520929234,0.060624621632608,0.057158413676555,0.054067221124072,0.051293294255972,
0.048790164050384,0.046520015526659,0.044451762472021,0.042559614328216,0.040821994436918,0.039220713076360,0.037740327911611,0.036367644104736,0.035091319749694,0.033901551618210,
0.032789822769226,0.031748698264178,0.030771658619406,0.029852963105116,0.028987536831235,0.028170876927015,0.027398974150577,0.026668247046594,0.025975486369524,0.025317807952237,
0.024692612559884,0.024097551550024,0.023530497382508,0.022989518198272,0.022472855826806,0.021978906694621,0.021506205197838,0.021053409175669,0.020619287181477,0.020202707297111,
0.019802627276572,0.019418085838248,0.019048194952552,0.018692132994678,0.018349138651361,0.018018505486444,0.017699577083736,0.017391742696744,0.017094433344688,0.016807118302258,
0.016529301937549,0.016260520858558,0.016000341333640,0.015748356955739,0.015504186523945,0.015267472119136,0.015037877353233,0.014815085774165,0.014598799410496,0.014388737441747,
0.014184634981896,0.013986241964959,0.013793322122823,0.013605652046522,0.013423020323131,0.013245226741243,0.013072081558809,0.012903404827583,0.012739025769316,0.012578782198948,
0.012422519990840,0.012270092584286,0.012121360524999,0.011976191039544,0.011834457640001,0.011696039756352,0.011560822394393,0.011428695817091,0.011299555247549,0.011173300591884,
0.011049836180480,0.010929070526218,0.010810916098373,0.010695289111028,0.010582109324938,0.010471299861813,0.010362787030177,0.010256500161929,0.010152371458864,0.010050335848451,
0.009950330848217,0.009852296438158,0.009756174940605,0.009661910907069,0.009569451011572,0.009478743950051,0.009389740345430,0.009302392657985,0.009216655100677,0.009132483559102,
0.009049835515823,0.008968669978739,0.008888947413295,0.008810629678273,0.008733679964941,0.008658062739366,0.008583743687707,0.008510689664287,0.008438868642304,0.008368249667015,
0.008298802811252,0.008230499133129,0.008163310635829,0.008097210229340,0.008032171694038,0.007968169646002,0.007905179503989,0.007843177457950,0.007782140439027,0.007722046090929,
0.007662872742633,0.007604599382327,0.007547205632535,0.007490671726352,0.007434978484754,0.007380107294899,0.007326040089390,0.007272759326435,0.007220247970880,0.007168489476043,
0.007117467766331,0.007067167220595,0.007017572656184,0.006968669313665,0.006920442842179,0.006872879285400,0.006825965068070,0.006779686983080,0.006734032179077,0.006688988148559,
0.006644542716461,0.006600684029176,0.006557400544009,0.006514681019072,0.006472514503523,0.006430890328223,0.006389798096729,0.006349227676643,0.006309169191274,0.006269613011630,
0.006230549748695,0.006191970246004,0.006153865572485,0.006116227015566,0.006079046074534,0.006042314454137,0.006006024058408,0.005970166984722,0.005934735518054,0.005899722125449,
0.005865119450678,0.005830920309093,0.005797117682645,0.005763704715089,0.005730674707343,0.005698021113015,0.005665737534072,0.005633817716669,0.005602255547100,0.005571045047903,
0.005540180374081,0.005509655809452,0.005479465763124,0.005449604766080,0.005420067467870,0.005390848633424,0.005361943139948,0.005333345973940,0.005305052228286,0.005277057099451,
0.005249355884766,0.005221943979788,0.005194816875755,0.005167970157107,0.005141399499097,0.005115100665462,0.005089069506176,0.005063301955265,0.005037794028688,0.005012541822288,
0.004987541509797,0.004962789340898,0.004938281639363,0.004914014801222,0.004889985292996,0.004866189649989,0.004842624474615,0.004819286434787,0.004796172262343,0.004773278751518,
0.004750602757469,0.004728141194828,0.004705891036305,0.004683849311329,0.004662013104729,0.004640379555425,0.004618945855228,0.004597709247572,0.004576667026364,0.004555816534823
};
int main()
{
    scanf("%lld",&n);
    for(long long i=1;i<=220;i++)
    {
        if(i*up>=n)
        {
            for(long long j=(i-1)*up+1;j<=n;j++) ans+=1.0/j;
            printf("%.0lf",ans*n);
            return 0;
        }
        else
            ans+=a[i];
    }
}

猜你喜欢

转载自www.cnblogs.com/chen1352/p/9071410.html