http://218.28.19.228/cogs/problem/problem.php?pid=2066

【题目描述】

七十君最近爱上了排序算法,于是Ta让十七君给Ta讲冒泡排序。

十七君给七十君讲完了冒泡排序以后,七十君回家苦思冥想,又创造了一种名

为七十排序的算法。下面是这个算法排序一个排列的过程:

首先从左到右扫描每个相邻数对。如果这两个数是逆序的,则将第二个数(也

就是小的数)放在整个排列的开头,其他数位置不变,并把计数器加一。如果

没有逆序的相邻数对了,就说明已经排好序了,算法终止。

七十君认为计数器的值反映了这个算法的运行时间。但十七君觉得七十君发明

的这个算法会很慢,所以他请你帮忙算算,对于所有长度为n的排列P,

 

的值,这里f(P)表示排列P运行算法结束时计数器的值。

【输入格式】

一行一个整数n。

【输出格式】

如果E(n)=a/b,求c使得

bc 三 a  (mod 10^9+7)

并输出,其中0≤c<10^9+7,如果e不存在输出-1。

【样例输入】

4

【样例输出】

250000005

【提示】

对于排列4 1 3 2,算法结束时计数器的值为5。

4 1 3 2,4和1形成逆序,将1放到排列最前方。

1 4 3 2,4和3形成逆序,将3放到排列最前方。

3 1 4 2,3和1形成逆序,将1放到排列最前方。

1 3 4 2,4和2形成逆序,将2放到排列最前方。

2 1 3 4,2和1形成逆序,将1放到排列最前方。

1 2 3 4,现在排列已经排序完毕。

E(4)=3.25。

数据范围与约定

对于20%的数据,n≤8。

对于40%的数据,n≤30。

对于60%的数据,n≤200。

对于1OO%的数据,n≤10^5。

      设$\sum_{P.len = N} f(P) = F(N)$。观察算法流程可以发现当扫描到第N个元素时,前N-1个元素一定有序,所以我们可以考虑递推求解F函数。现假设P为1到N的排列,最后一个元素为i,而我们已经事先花费$N * F(N-1) + N!$的时间,让所有N排列的前N-1个元素有序并将最后一个元素移至开头。
      现在处理一个长度为N的满足$A_1  = N, A_i = i-1(1 < i \leq N)$的排列A,设将它排序所需时间为g(N)。考虑这一过程,我们仍需先将这一排列的前N-1个元素排序,然后将最后一个元素($A_N = N-1$)移至开头,此时新序列的第N个元素已经就位,而前N-1个元素仍满足”排列A“的性质,再按此过程处理一下就可以了。从而有$$g(1) = 0, g(N) = g(N-1) + 1 + g(N-1)(N > 1)$$ 解出$g(N) = 2^{N-1} - 1$。
      那么我们就可以得到$$F(N) = N \times (F(N-1) + N!) + (N-1)! \times (\sum_{i = 1}^{N-1} g(i))$$那么$$E(N) = E(N-1) + \frac{2^{N-1} - 1}{N}$$ 把每轮的1/N改成N的乘法逆元即可。

[COGS 2066]七十与十七的更多相关文章

  1. [COGS 2066]七十和十七

    2066. 七十和十七 ★★★   输入文件:xvii.in   输出文件:xvii.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 七十君最近爱上了排序算法,于是Ta ...

  2. 8.22 NOIP模拟测试29(B) 爬山+学数数+七十和十七

    T1 爬山 二分最高高度,$O(1)$判断是否可行. #include<iostream> #include<cstdio> #define ll long long usin ...

  3. NOIP模拟测试29「爬山·学数数·七十和十七」

    爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左 ...

  4. “全栈2019”Java第七十六章:静态、非静态内部类访问权限

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. (七十八)使用第三方框架INTULocationManager实现定位

    前面(第七十五.七十六篇)讲述了如何通过CoreLocation获取位置,授权.获取等相当复杂,如果借助于第三方框架,可以简单的实现授权与定位. 首先在GitHub中搜索LocationManager ...

  6. 第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装

    第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装 xadmin介绍 xadmin是基于Django的admin开发的更完善的后台管理系统,页面基于Bootstr ...

  7. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍

    第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...

  8. 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

    第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...

  9. 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表

    第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课 ...

随机推荐

  1. JavaScript入门--慕课网学习笔记

     JAVASCRIPT—(慕课网)入门篇 我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script&g ...

  2. java浅复制与深使用接口实现

    1.浅复制与深复制概念⑴浅复制(浅克隆)被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复 ...

  3. [HBase]mem store flusher 流程

  4. 洛谷P2016战略游戏

    传送门啦 战略游戏这个题和保安站岗很像,这个题更简单,这个题求的是士兵人数,而保安站岗需要求最优价值. 定义状态$ f[u][0/1] $ 表示 $ u $ 这个节点不放/放士兵 根据题意,如果当前节 ...

  5. 关于int *a; int &a;a; int &a; *a; int * &a

    int i; int*a =&i;//这里a是一个指针,它指向变量i int&b = i;//这里b是一个引用,它是变量i的引用,引用是什么?它的本质是什么?下面会具体讲述 int*& ...

  6. box-sizing 盒子模型不改变大小

    参考 box-sizing 相关说明 在需要设置元素的内边距或者外边距而不想改变整体大小时,可以使用该属性,记录之. .simple { width: 500px; margin: 20px auto ...

  7. 【AtCoder】AGC011 D - Half Reflector

    题解 大意是n个管子排成一排,每个管子有两种状态,A状态是从某个方向进去,从原方向出来,B状态是从某个方向进去,从另一个方向出来 球经过一个A状态的管子这个管子会立刻变成B状态,经过一个B状态的管子会 ...

  8. 7-15 Square Destroyer 破坏正方形 uva1603

    先是处理所有的正方形 从边长为1开始 将其边存好 满边存好 然后不断扫描正方形  并且进行拆除  直到拆完或者 步数小于等于9(启发方程  因为n小于等于5  九次足以将所有的拆完) 代码实施有很多细 ...

  9. Linux下 rz 和 sz 命令的安装与使用

    目录 Linux下 rz 和 sz 命令的安装与使用 rz/sz命令的安装 sz命令-发送文件到本地(下载): rz命令-本地上传文件到服务器(上传): 声明 Linux下 rz 和 sz 命令的安装 ...

  10. 43:n个骰子的点数

    算法分析: 算法1.基于递归求色子点数,时间效率不高 现在我们考虑如何统计每一个点数出现的次数.要向求出n个骰子的点数和,可以先把n个骰子分为两堆:第一堆只有一个,另一个有n-1个.单独的那一个有可能 ...