[COGS 2066]七十和十七
2066. 七十和十七
★★★ 输入文件:
xvii.in
输出文件:xvii.out
简单对比
时间限制:1 s 内存限制:256 MB【题目描述】
七十君最近爱上了排序算法,于是Ta让十七君给Ta讲冒泡排序。
十七君给七十君讲完了冒泡排序以后,七十君回家苦思冥想,又创造了一种名
为七十排序的算法。下面是这个算法排序一个排列的过程:
首先从左到右扫描每个相邻数对。如果这两个数是逆序的,则将第二个数(也
就是小的数)放在整个排列的开头,其他数位置不变,并把计数器加一。如果
没有逆序的相邻数对了,就说明已经排好序了,算法终止。
七十君认为计数器的值反映了这个算法的运行时间。但十七君觉得七十君发明
的这个算法会很慢,所以他请你帮忙算算,对于所有长度为n的排列P,
\[E(n)=\frac{\sum f(P)}{n!}\]
的值,这里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。
题解
首先我们可以发现, 将 $n$ 个数排序的过程可以转化为按方案排序 $n-1$ 个数后将最后一个数按方案再排进去. 对于长度为 $n$ 的全排列, 若第 $n$ 个数 $a_n=n$ , 则不会引起计数器变动(因为它在前 $n-1$ 个排好序后就已经在最后了), 否则会引起计数器增加 $2^{a_n-1}$ . 枚举最后加入的数 $a_n$ 即可在 $O(n^2)$ 时间复杂度内解决. 最终表达式为:
\[ans=\sum_{i=1}^n\sum_{j=1}^{i-1}2^{j-1}\]
注意到第二部分求和为等差数列形式, 我们可以通过等差数列求和公式进行计算. 于是上式可以化简为:
\[ans=\sum_{i=1}^n\frac{2^{i-1}-1}{i}\]
参考代码
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> const int MOD=1e9+; int Pow(int,int,int); int main(){
int n;
scanf("%d",&n);
int ans=;
for(int i=;i<=n;i++){
ans=(ans+1ll*(Pow(,i-,MOD)-+MOD)%MOD*Pow(i,MOD-,MOD)%MOD)%MOD;
}
printf("%d\n",ans);
return ;
} int Pow(int a,int n,int p){
int ans=;
while(n>){
if((n&)!=){
ans=1ll*ans*a%p;
}
a=1ll*a*a%p;
n>>=;
}
return ans;
}
Backup
[COGS 2066]七十和十七的更多相关文章
- [COGS 2066]七十与十七
http://218.28.19.228/cogs/problem/problem.php?pid=2066 [题目描述] 七十君最近爱上了排序算法,于是Ta让十七君给Ta讲冒泡排序. 十七君给七十君 ...
- 8.22 NOIP模拟测试29(B) 爬山+学数数+七十和十七
T1 爬山 二分最高高度,$O(1)$判断是否可行. #include<iostream> #include<cstdio> #define ll long long usin ...
- NOIP模拟测试29「爬山·学数数·七十和十七」
爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左 ...
- “全栈2019”Java第七十六章:静态、非静态内部类访问权限
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- (七十八)使用第三方框架INTULocationManager实现定位
前面(第七十五.七十六篇)讲述了如何通过CoreLocation获取位置,授权.获取等相当复杂,如果借助于第三方框架,可以简单的实现授权与定位. 首先在GitHub中搜索LocationManager ...
- 第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装
第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装 xadmin介绍 xadmin是基于Django的admin开发的更完善的后台管理系统,页面基于Bootstr ...
- 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍
第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...
- 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表
第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...
- 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表
第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课 ...
随机推荐
- CentOS7手动修改系统时间
CentOS7 永久修改系统时间 安装在虚拟机上的CentOS7的时间分为系统时间和硬件时间.二者都修改,重启系统(init 6 )才会永久生效.修改步骤如下 查看当前系统时间 date 修改当 ...
- [PY3]——内置数据结构(3)——字符串及其常用操作
字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...
- The servlets named [create_subscription] and [servlet.create] are both mapped to the url-pattern [/create] which is not permitted [duplicate]
原因,代码中在public前已经有了默认的配置路径: 如: @WebServlet("/ShowUser")public class ShowUser extends HttpSe ...
- WINFORM如何实现无聚焦框的Button按钮
当我们将一个button按钮设置如下属性时,总有一个聚焦框来困扰着我们 button1.FlatStyle = FlatStyle.Flat; 我们想要的效果是这样的: 但当使用了Tab切换焦点时 发 ...
- [javaSE] 集合工具类(Collections-sort)
java为我们提供了一个集合的工具类,方便我们对集合进行操作,里面的方法都是静态方法. Collections.sort()方法,参数:List<T>集合对象,这个对象带着泛型,是为了保证 ...
- 一、JDBC基础示例
一.简介 JDBC全称叫做Java database connectivity,直译为Java语言的数据库连接.它主要针对于支持结构化查询语言(SQL)的数据源,与Java程序连接并操作数据. JDB ...
- C#实现局部峰值查找,功能对应Matlab中的findpeaks.m
相关算法的原理参考Ronny,地址:图像分析:投影曲线的波峰查找,这里感谢下原作者. 参照C++的代码实现,我用C#翻译了下,其实原理也很简单的,下面放相关实现代码: private double[] ...
- JMX 远程监控 Linux tomcat 功能实现
作者远程服务器操作系统 CentOS 7.0, tomcat 版本 7.0 1. Linux tomcat 配置 1.1 catalina_opt 配置 可以在 catalina.sh 文件中添加如下 ...
- HDU 2045 RPG难题
http://acm.hdu.edu.cn/showproblem.php?pid=2045 这道题也是用倒推: 先假设前n-2个块都已经涂好,涂第n-1块时有以下两种情况: 1.n-1和1相同,则n ...
- Struts2(一)— 入门
一.概述 1.什么是Struts2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立 ...