http://218.28.19.228/cogs/problem/problem.php?pid=2066
【题目描述】
七十君最近爱上了排序算法,因而Ta让十七君给Ta讲冒泡排序。 php
十七君给七十君讲完了冒泡排序之后,七十君回家苦思冥想,又创造了一种名 算法
为七十排序的算法。下面是这个算法排序一个排列的过程: 函数
首先从左到右扫描每一个相邻数对。若是这两个数是逆序的,则将第二个数(也 排序
就是小的数)放在整个排列的开头,其余数位置不变,并把计数器加一。若是 get
没有逆序的相邻数对了,就说明已经排好序了,算法终止。 im
七十君认为计数器的值反映了这个算法的运行时间。但十七君以为七十君发明 数据
的这个算法会很慢,因此他请你帮忙算算,对于全部长度为n的排列P, img
![]()
的值,这里f(P)表示排列P运行算法结束时计数器的值。 di
【输入格式】
一行一个整数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。