zoukankan      html  css  js  c++  java
  • 北京师范大学第十六届程序设计竞赛决赛 C萌萌哒身高差

    链接:https://www.nowcoder.com/acm/contest/117/C
    来源:牛客网

    萌萌哒身高差
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    Special Judge, 64bit IO Format: %lld

    题目描述

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

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

    以下是wfy同学的日记:

    昨天,何老师告诉我们:明天我们去春游,大家准备好喝的和吃的哦!
    大家听了都兴奋起来,有的欢呼,有的鼓掌,开心得不得了。第二天,我们早早地来到学校,迫不及待地上了车,来到了公园。一进门,啊,太美了!公园中有那么多树,有高有矮,有粗有瘦,密密的,在春风吹拂下轻轻摇摆着,像是欢迎我们的到来。公园中有那么多的鲜花,有红有黄,有紫有白,散发着淡淡的清香,闻得我们都醉了。公园的边角上有一条清澈的小河,河水缓缓地流淌着,可以看到水里的鱼儿在快活地游来游去,多自在啊!水草碧绿碧绿的,多新鲜啊!小河的旁边是一片小树林,远远望去一片鲜绿。我们在里面吃东西、做游戏、捉迷藏,玩得疯极了。树林的后面是连绵起伏的小山坡,蜿蜿的真像一条游动的蛇。当然,我觉得公园的天空也很美。它万里无云,一碧如洗,很清澈。小鸟在展翅飞翔,它们形态各异,一会儿上升,一会儿下滑,一会儿吃虫,一会儿在小树林里休息,非常悠闲。快乐时光总是那么短暂,很快,天色就昏暗了。我们依依不舍地上了车,回到了学校,我真希望明年的春天还能再来看看这美丽的公园。
    回到学校后,何老师说:请大家排成一排,我们来拍照片啦!
    何老师特别喜欢萌的东西,比如**,比如****,等等。
    何老师认为,同学们站成一排时,相邻两个同学身高相差越多,这两个同学站在一起越萌。
    那么所有相邻两个同学的身高差加起来越大,拍出来的照片就越萌,也就是这张照片的萌力指数。
    何老师希望拍出来的照片的萌力指数尽可能大。
    然而何老师并不是数学老师,而是语文老师。何老师觉得很GG。
    何老师只想知道,如果让同学们随便站成一排(站成所有排列的可能性都相等),萌力指数的数学期望是多少。
    聪明的我一下子就算出了答案,然后何老师就奖励了我一个很萌的礼物。
    今天真的好开心。

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

    输入描述:

    第一个是一个正整数T(T ≤ 20),表示测试数据的组数,
    每组测试数据只有一行,包含一个整数n(2 ≤ n ≤ 100)。

    输出描述:

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

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

    示例1

    输入

    复制
    2
    2
    3

    输出

    复制
    1.000000000000
    2.666666666667

    说明

    对于第二组样例,所有可能的排列是[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1],所以答案是
    frac{2+3+3+3+3+2}{6}=frac{8}{3}
    (1)多写几个样例,找规律。2的时候3/3;3的时候8/3;4的时候15/3;5的时候24/3;6的时候35/3,可以发现n的时候就是((n*n)-1)/3即n方减一
    #include <iostream>  
    #include <iomanip>2  
    using namespace std;  
    int main()  
    {  
        int t;  
        cin>>t;  
        while(t--)  
        {  
            int n;  
            cin>>n;  
            cout<<fixed<<setprecision(12)<<((n*n)-1.0)/3.0<<endl;  
        }  
        return 0;  
    }  

    (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即为答案。

    #include<bits/stdc++.h>  
    using namespace std;  
      
    typedef long long ll;  
      
    const int N=1000010;  
    const int mod=1e9+7;  
    const int Max=0x3f3f3f3f;  
      
    ll ans[N];  
    char ch[N];  
      
    int main()  
    {  
        int T;  
        cin>>T;  
        while(T--)  
        {  
            int i,j;  
            ll sum=0;  
            int n;  
            cin>>n;  
            for(i=n;i>=1;i--)  
            {  
                for(j=1;j<=n;j++)  
                {  
                    if(i>j)  
                    sum+=(i-j);  
                }  
            }  
            double ans=(2.0*sum)/n;  
            cout<<fixed<<setprecision(12)<<ans<<endl;  
        }  
        return 0;  
    }  
     
  • 相关阅读:
    (七)策略模式详解
    (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
    递归锁,死锁,使用递归锁解决死锁,信号量
    并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在
    线程了解以及创建线程的Threading模块中的部分方法
    进程 >> 互斥锁、队列与管道、生产者消费者模型
    进程比较基础的内容
    基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程
    网络基础 + 简易服务端和客户端
    单例模式
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/9094072.html
Copyright © 2011-2022 走看看