zoukankan      html  css  js  c++  java
  • 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];这里的b常数有很多中情况,我们要找的是普遍规律,所以就可以暴力实验求解;

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

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

     

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

     

     

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

        UPD:19.8.22 21:16 抢修完毕

     设f[i]表示i个数的sigama(就是题目公式中的分子)然后我们考虑线性递推公式:

    我们可以分为两种情况:

    1 结尾的数字就是i,那么这个i就不对最终的步数有额外的贡献,所以直接转移,

    2 然后枚举没每一个结尾的数字,就可以得到转移的额外贡献是$ sum (f[i-1]+(i-1)!*g[k])(1<=k<i)$

    所以我们可以得出柿子为

    $ f[i]=f[i-1]+sum(f[i-1]+(i-1)!*g[k])(1<=k<i) $

    合并就可以得到:

    $ f[i]=f[i-1]*i+(i-1)!*(2^{i-1}-1) $

    那么重点就是这个g数组

     $g[i]$我们可以设他为以i为结尾的插到他该在的位置所需要的步数,他之前的都是有序的!

    然后我们通过归纳可以发现,显然$ g[1]=1$

    $g[2]=g[1]+1=2$

    $g[3]=g[1]+g[2]+1=4$

    .........

    那么我们通过归纳就可以的出$g[i]=(2^{i-1} )$;

    然后利用高考数学的知识稍转化一下就可以了!

  • 相关阅读:
    Chapter 8. 面向对象(类库、委托)
    Chapter 8. 面向对象(多态--接口)
    练习:C# -- 多态
    Chapter 8. 面向对象(多态--抽象类)
    Chapter 8. 面向对象(多态--虚方法)
    Chapter 8. 面向对象(继承)
    Chapter 8. 面向对象(封装)
    Chapter 8. 面向对象(类、对象、字段、方法、属性、构造函数)
    练习、C# 结构体、冒泡排序
    1月19日(HTML之旅) CSS样式表
  • 原文地址:https://www.cnblogs.com/hzoi-lsc/p/11393175.html
Copyright © 2011-2022 走看看