【题解】T749 localmaxima
权限限制没有超链接
题目描述 Description
给出一个排列,若其中一个数比它前面的数都大,则称为localmaxima数,求一个随机排列中localmaxima数的个数的期望。
输入输出格式 Input/output
输入格式:
一个数n,表示排列为1-n的一个随机排列。
输出格式:
一个浮点数表示localmaxima数的个数期望。四舍五入保留8位小数。
输入输出样例 Sample input/output
样例测试点#1
输入样例:
2
输出样例:
1.50000000
说明 description
1,2的排列共两种:1,2和2,1.共3个localmaxima数。期望为3/2=1.5.
对30%数据n<=10.
对80%数据n<=1000000.
对100%数据n<=2^31-1
个人解法:
深深被数论的魅力所折服。
要非常非常感谢锟哥的帮助与学长的启发。
首先初看此题,全然没有思路。本来想是暴力table的了,但是很悲哀的是每一个n都会有全然不同的的答案,枚举?丝毫不可能成立……恐怕打表也只是等上几个小时的折腾了。
那么怎么办呢?
这个时候锟哥给了我启示。
既然我们是求期望嘛,就可以从每一个数开始入手。
这一题的数学期望就是
把每一个数成为localmaxima的情况加起来,再除以所有情况数。
至于所有的情况数,很简单,就是An取n,也就是n!。
于是我就开始着手于某一个数成为localmaxima的所有可能数。
先考虑了最简单的1。
1可能成为localmaxima的情况有多少种呢?
我们知道,在一个全排列中,没有比1小的。那么1只有放在第一位的时候可能成为localmaxima。那么这一共有多少种情况呢?很简单,就是A(n-1)取n-1,即(n-1)!。
那2呢?
我们发现,比2小的只有1。所以我们可以分两种情况:
第一种情况,2放在第一位,有(n-1)!种可能。
第二种情况,2放在第二位,因为2之前的数只可能是1才会让2成为localmaxima,所以有(n-2)!种可能。
如果2摆在第三位及以后,就必定会有一个比2大的数在2的前面,所以2就不再是localmaxima了,所以我们发现,对于一个数i,只需要考虑i放在第1至i位。
所以2成为localmaxima的可能一共有$(n-1)!+(n-2)!$种。
接下来考虑3。
比3小的有两个数,1和2。
那么我们就分三种情况讨论。
第一种情况,当然是3放在第一位,共(n-1)!种。
第二种情况,3放在第二位,这个时候比3小的有两个,1和2,所以就是$A^{1}_{2}*(n-2)!$种。
第三种情况,3放在第三位,这个时候3之前的排列共有$A^{2}_{2}$种,3之后的排列共有$(n-3)!$种,所以就是$A^{2}_{2}*(n-3)!$种。
所以综合起来,就是$(n-1)!+A^{1}_{2}*(n-2)!+A^{2}_{2}*(n-3)!$
诶,这个时候整理一下,我们就来规律了。
对于一个数i,它成为localmaxima的所有情况数应该是:
$A^{0}_{i-1}*(n-1)!+A^{1}_{i-1}*(n-2)!+A^{2}_{i-1}*(n-3)!+……+A^{i-1}_{i-1}*(n-i)$
这个公式的意义是什么呢?就是考虑i在1至i的每一个位置j时,它前面的排列有A(j-1取i-1)种,后面的排列有A(n-j取n-j)种(也就是(n-j)!种)。所以就是1至i的累加和(那个符号不会打……)了。
于是我就试了几组数据。
首先是n,表示全排列的长度。
接下来n行。第i行的数表示i成为localmaxima的所有情况数:
n=5时
n=10时
n=20时
似乎并没有什么规律的样子。
后来想到要求的期望,每一个数变为local数的情况除以所有情况(n!)再加起来就是期望了。所以便想到把每一项求出来。
神奇的事就这样发生了。
我又试了几组数据。
首先是一个n,意义同上。
接下来n行。第i行的数字表示第i个数成为localmaxima的情况数除以n!(也就是全排列的总个数)的值。
n=5时
n=10时
n=20时
我想规律就显而易见了吧。
所以
$ans=1/1+1/2+1/3+……+1/n$
所以就这样把公式推导出来了。
接下来我就兴奋地把程序打了下来,本满以为可以AC,结果却发现测试点9和10都超时了,这个时候我才发现,$n<=2^{31}-1$。
那么怎么办?
这个时候就是学长给了我启发。
这个数学界都还没有解决彻底的问题呢……
对于大数据for的话是肯定超时了,不过我们还是可以肯定在80分的点用for还是可以过的,毕竟只有1000000。
那对于那么大的数嘛……
既然只需要精确到8为小数,我们就可以尝试一下调和级数了。
至于怎么用嘛……这里面很清楚http://baike.baidu.com/link?url=06w5WhIAzAi8FjOxV4WotFCikPRKmqMKAyGW-2wq-ToakcdLBxcl3XwNCvpBGaCwASC_5NQsV6gAEP-ncR9vTK
简单地说,就是$1/1+1/2+1/3+1/4+……1/n=ln(n+1)+r$,其中r是一个常数,好像叫欧拉常数吧。
很可惜的是,我们目前对于这个常数了解甚少……包括我们并不知道r到底是无理数还是有理数……
所以很明显了,对于前80分时不能用调和级数的,因为精度要求高,调和级数只是用于AC大数据的了(这在上面的论文中也有提及的样子)。
说了半天,代码只有13行,只是知识倒是精华了呢。
代码如下:
#include<cstdio>
#include<cmath>
#include<iostream>
#define re register int
using namespace std;
const double r=0.5772156649;
int n,i;
double vk;
int main(){
freopen("T749.in","r",stdin);
freopen("T749.out","w",stdout);
scanf("%d",&n);
if(n<=1000000) for(double i=1;i<=n;++i) {
vk=vk+1/i;
// cout<<vk<<endl;
}
else vk=log(n+1)+r;
// cout<<log(n+1)+r<<endl;
printf("%0.8lf",vk);
return 0;
}
【题解】T749 localmaxima的更多相关文章
- 【题解】localmaxima 数论
# T749 localmaxima 权限限制没有超链接 题目描述 Description 给出一个排列,若其中一个数比它前面的数都大,则称为localmaxima数,求一个随机排列中localmax ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
随机推荐
- JavaScript 原始值与包装对象
前言 随着 JavaScript 越来越流行,越来越多地开发者开始接触并使用 JavaScript. 同时我也发现,有不少开发者对于 JavaScript 最基本的原始值和包装对象都没有很清晰的理解. ...
- 对标印度的PostMan,一款中国接口测试软件的崛起
对于我们开发者,Api接口调试一定不陌生.包括我在内,之前进行Api调试时,一直使用的是一款印度的软件Postman.记得刚入手的时候,由于该款软件缺乏中文版本,上手一直比较慢,而且还至少存在如下几个 ...
- Serverless实践-静态网站托管
Serverless实践-静态网站托管 超多图预警!!! 本文旨在帮助不懂运维/网络/服务器知识的小白,在不租用云服务器的情况下,实现Web站点的上线部署 适合边看文章边跟着动手做 包含使用Githu ...
- redis中keys命令带来的线上性能问题
起因 下午接到运维反馈,生产redis有个执行keys的命令请求太慢了,要两三秒才能响应 涉及命令如下: KEYS ttl_600::findHeadFootData-15349232-*-head ...
- [bug] Failed building wheel for xxx
参考 https://blog.csdn.net/pengzhisen123/article/details/79049834 https://www.lfd.uci.edu/~gohlke/pyth ...
- 阿里云上安装 OpenStack 是什么体验
阿里云上跑火车(安装 OpenStack Train 版本),猜猜最终花了多少钱? 前言 前面给大家提供了用虚拟机安装 OpenStack 的镜像,虽然已经很简便了,但还是略显笨重.一来镜像文件比较大 ...
- mysql-connector-java版本匹配问题:ERROR DruidDataSource - create connection SQLException(Day_45)
mysql安装的是:8.0.23,启动项目后发现报错连接不上数据库 报错信息: Druid-ConnectionPool-Create-150783284] ERROR DruidDataSource ...
- 常用数据库连接池配置及使用(Day_11)
世上没有从天而降的英雄,只有挺身而出的凡人. --致敬,那些在疫情中为我们挺身而出的人. 运行环境 JDK8 + IntelliJ IDEA 2018.3 优点: 使用连接池的最主要的优点是性能.创 ...
- 离散傅里叶变换的衍生,负频率、fftshift、实信号、共轭对称
封面是福州的福道,从高处往下看福道上的人在转圈圈.从傅里叶变换后的频域角度来看,我们的生活也是一直在转圈圈,转圈圈也是好事,说明生活有规律,而我们应该思考的是,如何更有效率地转圈圈--哦别误会,我真不 ...
- 痞子衡嵌入式:在SBL项目实战中妙用i.MXRT1xxx里SystemReset不复位的GPR寄存器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx里SystemReset不复位的GPR寄存器的小妙用. 我们知道稍大规模的项目代码设计一般都是多人协作完成的,在项目 ...