“清明时节雨纷纷,路上行人欲断魂。”

然而wfy同学的心情是愉快的,因为BNU ACM队出去春游啦!并且,嗯。。。

以下是wfy同学的日记:

昨天,何老师告诉我们:明天我们去春游,大家准备好喝的和吃的哦!

大家听了都兴奋起来,有的欢呼,有的鼓掌,开心得不得了。第二天,我们早早地来到学校,迫不及待地上了车,来到了公园。一进门,啊,太美了!公园中有那么多树,有高有矮,有粗有瘦,密密的,在春风吹拂下轻轻摇摆着,像是欢迎我们的到来。公园中有那么多的鲜花,有红有黄,有紫有白,散发着淡淡的清香,闻得我们都醉了。公园的边角上有一条清澈的小河,河水缓缓地流淌着,可以看到水里的鱼儿在快活地游来游去,多自在啊!水草碧绿碧绿的,多新鲜啊!小河的旁边是一片小树林,远远望去一片鲜绿。我们在里面吃东西、做游戏、捉迷藏,玩得疯极了。树林的后面是连绵起伏的小山坡,蜿蜿的真像一条游动的蛇。当然,我觉得公园的天空也很美。它万里无云,一碧如洗,很清澈。小鸟在展翅飞翔,它们形态各异,一会儿上升,一会儿下滑,一会儿吃虫,一会儿在小树林里休息,非常悠闲。快乐时光总是那么短暂,很快,天色就昏暗了。我们依依不舍地上了车,回到了学校,我真希望明年的春天还能再来看看这美丽的公园。
回到学校后,何老师说:请大家排成一排,我们来拍照片啦!

何老师特别喜欢萌的东西,比如**,比如****,等等。

何老师认为,同学们站成一排时,相邻两个同学身高相差越多,这两个同学站在一起越萌。

那么所有相邻两个同学的身高差加起来越大,拍出来的照片就越萌,也就是这张照片的萌力指数。

何老师希望拍出来的照片的萌力指数尽可能大。

然而何老师并不是数学老师,而是语文老师。何老师觉得很GG。

何老师只想知道,如果让同学们随便站成一排(站成所有排列的可能性都相等),萌力指数的数学期望是多少。

聪明的我一下子就算出了答案,然后何老师就奖励了我一个很萌的礼物。

今天真的好开心。

BNU ACM队共有名同学,身高分别是,聪明的你能计算出何老师想要的数学期望吗?

 

Input

第一个是一个正整数,表示测试数据的组数,

每组测试数据只有一行,包含一个整数

 

Output

对于每组测试数据,输出一行,包含一个实数,表示萌力指数的数学期望值,要求相对误差不超过

也就是说,令输出结果为,标准答案为,若满足,则输出结果会被认为是正确答案。

 

Sample Input

2
2
3

Sample Output

1.000000000000
2.666666666667

Hint

对于第二组样例,所有可能的排列是[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1],所以答案是

思路;

(1)多写几个样例,找规律。2的时候3/3;3的时候8/3;4的时候15/3;5的时候24/3;6的时候35/3,可以发现n的时候就是((n*n)-1)/3即n方减一

 1 #include <iostream>
2 #include <iomanip>2
3 using namespace std;
4 int main()
5 {
6 int t;
7 cin>>t;
8 while(t--)
9 {
10 int n;
11 cin>>n;
12 cout<<fixed<<setprecision(12)<<((n*n)-1.0)/3.0<<endl;
13 }
14 return 0;
15 }

(2)另一种思考方式(重点),由于是全排列,对于n个数,总共有n*(n-1)/2种形式的差,且每种差出现次数相同,两重for循环即可求出所有形式的差出现一次的和sum,那么求出每种差出现的次数就可以求出差的总和。由于每一种顺序有n-1种差,有n!种序列,所以每次出现的次数为:n!*(n-1)/(n*(n-1)/2)=2*(n-1)!所以和即为:(sum*2*(n-1)!)/n! = sum*2/n即为答案。

数学期望是求np的和,这里的n就是每种排列差的和,p就是每种排列的概率。而一般全排列的题找思路都需要改变p的对象。这里就是把每种排列的概率转换为了每种形式的差的概率为p = 2 / n 而此时n的和为 = sum,所以np = sum * 2 / n即为答案。

 1 #include<bits/stdc++.h>
2 using namespace std;
3
4 typedef long long ll;
5
6 const int N=1000010;
7 const int mod=1e9+7;
8 const int Max=0x3f3f3f3f;
9
10 ll ans[N];
11 char ch[N];
12
13 int main()
14 {
15 int T;
16 cin>>T;
17 while(T--)
18 {
19 int i,j;
20 ll sum=0;
21 int n;
22 cin>>n;
23 for(i=n;i>=1;i--)
24 {
25 for(j=1;j<=n;j++)
26 {
27 if(i>j)
28 sum+=(i-j);
29 }
30 }
31 double ans=(2.0*sum)/n;
32 cout<<fixed<<setprecision(12)<<ans<<endl;
33 }
34 return 0;
35 }

参考博客:戳这里

最新文章

  1. CGI与FastCGI
  2. 管理者与下属谈话的技巧及注意点[持续更新ing]
  3. Windows 基础知识2
  4. equals和==的区别
  5. ireport5.6+jasperreport6.3开发(三)--以javabean为基准的报表开发(javabean)
  6. nginx配置文件语法高亮显示方法
  7. SQL2008安装提示&quot;Microsoft visual studio 2008早期之前的版本
  8. iOS判断数组不为空
  9. 解决安装vc2005运行库时提示Command line option syntax error.Type Command/?for Help
  10. cocospod 安装和使用
  11. TKinter事件及绑定
  12. linux下编译安装mysql5.5以上版本
  13. 辽宁OI2016夏令营模拟T2-road
  14. 连接虚拟机mysql无法访问,报错编号1130的解决方法
  15. CSS继承、层叠和特殊性
  16. C++数据结构中的基本算法排序
  17. numpy linalg
  18. Spring事务隔离级别和传播性
  19. C语言四舍五入
  20. java 集合(三)List接口

热门文章

  1. Table controls and tabstrip controls
  2. ClickHouse入门:表引擎-HDFS
  3. TekRADIUS5.5安装教程
  4. Code Review 的几个技巧
  5. (转载)微软数据挖掘算法:Microsoft 目录篇
  6. Linux下编译安装源码包软件 configure ,make, make install, make test/check, make clean 假目标
  7. Jenkins部署web项目到Tomcat(shell脚本)
  8. 数组赋值到select
  9. 18.RAID介绍和部署磁盘阵列
  10. ES模块化的导入和导出