NOIP 模拟29 B 侥幸

这次考得好纯属是侥幸,我T3打表试数试了两个小时,没有想打T2的正解(其实是打不出来)所以这个T3A掉纯属是侥幸,以后还是要打正解

在这里也口胡一下我的打表找规律的方法!:

首先使用一个next_permutation暴力出来n<=8的解,

0
500000004
500000005
250000005 250000008 416666681 416666690
291666705

我们发现n==2的时候就是2的逆元,那么我们就可以推测出线性递推的柿子是

f[i]=a*f[i-1]+b*inv[i];a和b都是常数   那么我们就可以愉快的枚举常数找规律了!

然后一个小时就过去了,当我发现两个常数都是定值的时候没有解,就尝试一下定一个常数然后凑另一个常数,然后就愉快的发现

f[i]=f[i-1]+(pow(2,i-1)-1)*inv[i-1];这里的b常数有很多中情况,我们要找的是普遍规律,所以就可以暴力实验求解;

但是这只是我的侥幸,如果这个常数是一个极大值,并且其中一个并不是定值,那么我就凉凉了!

所以打表模拟常数是考试的时候的冒险行为,成则名垂千古,败则一败涂地!(危险动作,请勿模仿!)

由于T3我是打表找规律A的,所以现在填一下正解的坑:

////////以下的博客博主出锅了!正在抢修!//////////

这里的排序可以分为两个步骤,第一是使n-1个数有序,其次是使第n个数插进去,如果An即为n,那么An就对数列没有贡献,反之则有pow(2,an-1)的贡献,下面我们就来证明一下!:

当An==1时,显然只需要一步即可,那么我们就可以设g[i]表示末尾为i时把它插到正常的地方所需要的步数!g[1]=1;

那么g[2]就是先到1的位置,然后再进行An=1的操作,所以g[2]=g[1]+1=2;

那么g[3]呢?就是g[3]=g[2]+g[1]+1=4;

那么我们就可以推广一下就可以得出g[n]=sigama{g[i]}+1(1<=i<=n-1)

所以就可以归纳出把一个数An插到他该在的位置所需的步数就是pow(2,An-1);

然后我们就可以推出ans=sigama{sigama{pow(2,j-1)}}(1<=j<=i-1)(1<=i<=n)

后面的求和可以使用高考数学中的乘共比错位相减化简为pow(2,i-1)-1;

所以整个的柿子就是f[i]=f[i-1]+(pow(2,i-1)-1)/i;这里就要使用逆元;答案就是f[n];

猜你喜欢

转载自www.cnblogs.com/hzoi-lsc/p/11393175.html