首页 > 其他分享 >列队春游题解 O(n方)

列队春游题解 O(n方)

时间:2023-07-21 15:11:25浏览次数:57  
标签:方案 ch 数为 题解 times 春游 列队 小朋友 身高

题目

前言

出生镇楼

思路:

  • 打个暴力
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace Testify{
    inline int read(){
        int f(1),x(0);
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
        for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
        return f*x;
    }
    inline void Write(int x){
        if(x>9) Write(x/10);
        putchar(x%10+48);
    }
    inline void write(int x){
        if(x<0) putchar('-'),x=-x;
        Write(x);
        putchar('\n');
    }
}
using namespace Testify;
const int N=305;
int n,tot(0);
int a[N];
double Tempestissimo(0);
signed main(void){
    n=read();
    a[0]=114514;
    for(register int i=1;i<=n;i++){
        a[i]=read();
    }
    sort(a+1,a+n+1);
    do{
        tot++;
        Tempestissimo++;
        for(register int i=2;i<=n;i++){
            int cnt=0;
            for(register int j=i-1;j>=0;j--){
                cnt++;
                if(a[j]>=a[i]){
                    break;
                }
            }
            Tempestissimo+=cnt;
        }

    }while(next_permutation(a+1,a+n+1));
    printf("%.2lf",Tempestissimo/tot);
    return 0;
}

对于每种情况都模拟一遍最后加上然后除以总数\(tot\)即为答案

  • 组合数学

对于每个小朋友都算出对应情况的方案数然后乘起来每个小朋友每种视野的期望就能得到答案

①预处理出对于每个小朋友 有多少身高比他矮的 小朋友 (注意一点身高和小朋友一样高的算比他高的,否则只能得50分) 假设\(h[i]\)表示对于第\(i\)个小朋友有多少身高比他矮的 小朋友

② 循坏枚举小朋友\(i\)比小朋友身高低的忍术\(j\)

③ 对于每种比他矮的小朋友 (\(j+1\)即视野期望) 通过逆天 组合数学 得到答案

④ 组合数学从两方面考虑,一是第\(i\)个的小朋友前\(j+1\)个人 (即前面矮的j个人的前一个) 是身高比i大的小朋友

那么身高较矮的\(j\)个小朋友方案数为\(A_{h[i]}^j\)

身高高或相等的小朋友抽取一个小朋友 方案数为\(A_{n-h[i]-1}^1\)

剩下的人随便放都可以,方案数\(A_{n-j-2}^{n-j-2}\)

将剩下\(n-j-2\)个人看做一个整体,将已经确定的\(j+2\)个人看做一个整体,那么就有\(n-j-1\)个空位插入\(1\)个整体,方案数为\((n-j-1)\)

⑤ 第二方面是第\(i\)个的小朋友前\(j+1\)个人 (即前面矮的j个人的前一个) 是老师

那么这种情况下 那么身高较 的\(j\)个小朋友方案数为\(A_{h[i]}^j\)

剩下的\(n-j-1\)个都是随便排,有方案数\(A_{n-j-1}^{n-j-1}\)种,

和上面不同的地方是,\(j+1\)个小朋友看做一个整体,这个整体一定在老师后面,即队伍最前面,就不能插空了


总结:设\(Tempestissimo\)为 的方案数,

\[Tempestissimo= { \sum_{i=1}^{n}{\sum_{j=0}^{h[i]}{A_{h[i]}^j \times(A_{n-h[i]-1}^1 \times A_{n-j-2}^{n-j-2} \times (n-j-1) +A_{n-j-1}^{A-j-1})} } } \]

接下来在每次循环中都将 单独的 方案数乘上视野期望(即j+1)在累计到\(ans\)中即可!!!!!!

\[ans= \sum_{i=1}^{n}{\sum_{j=0}^{h[i]}{(A_{h[i]}^j \times(A_{n-h[i]-1}^1 \times A_{n-j-2}^{n-j-2} \times (n-j-1) +A_{n-j-1}^{A-j-1})\times (j+1))} } \]

完结撒花!!不放代码捏

思路借鉴@Trump_

标签:方案,ch,数为,题解,times,春游,列队,小朋友,身高
From: https://www.cnblogs.com/phigros/p/17571449.html

相关文章

  • 【求助+半题解】BZOJ1461字符串的匹配
    先说思路:因为我们是比对较短的\(B\)与较长的\(A\)的子串,所以我们求不变的\(B\)的\(next\)对于这道题我们可以使用树状数组查询前缀和维护数的排名。对于相同的数我们查询的排名是有误的,因此不仅要比对小于等于该数的前缀和,也要比对小于该数的前缀和。如:对于\(A=2\)\(2\),\(B......
  • claude初步体验1(含个人遇到各种注册问题解决)
    很久之前体验的了,当记录一下吧(于三月)https://www.anthropic.com/claude-in-slack 若出现下面这个,而且你用了魔法还不行,大概率是你之前登录别的工作区,然后被检测出来不在他支持的地区了,然后官方把你禁用了,禁止你IP访问(我之前就是这样子),就是你的源IP,用魔法也不行。解决方法,重启......
  • LG4868 Preprefix sum 题解
    壹、题目大意给出长度为\(n\)的序列\(a_1\sima_n\),设\(S_i=\sum\limits_{j=1}^ia_j\),有两种操作可以给定\(i\)和\(x\),使得\(a_i=x\),也可以给定\(i\),查询\(\sum\limits_{j=1}^iS_j\)的值\(n\le100000\)贰、思路这道题查询的是\(S\),但实际上是\(a\),而操......
  • 题解 POJ3318【Matrix Multiplication】
    postedon2022-10-2119:56:08|under题解|sourceproblem判断三个\(n\timesn\)的矩阵是否满足\(A\timesB=C\),\(n\leq500\)。solution随机一个行向量\(v\)。若\(a\timesb=c\),则有\(v\timesa\timesb=v\timesc\)(不充分)。显然相乘复杂度仅为\(O(n^2)\)。类似于......
  • 题解 P4955 【[USACO14JAN]Cross Country Skiing S】
    postedon2021-02-2710:04:32|under题解|source这道题其实没有绿这么难,只需要二分+搜索就行了。读入。注意尽量不要用scanf读入bool,这好像是UB,可以用一个变量\(x\)存输入的数,然后直接类型转换。二分。套模版就行了,等一下我们再写\(\operatorname{check}()\)函......
  • CF1152F2 Neko Rules the Catniverse (Large Version) 题解
    发现挨位考虑填哪个不太现实,考虑值域。令\(dp_{i,j,st}\)表示考虑到\(i\),此时序列长度为\(j\),\(i-m\)到\(i-1\)填空状态为\(st\)的方案数,考虑选/不选数即可:\(dp_{i,j,st}\times(\text{popcount}(st)+1)\todp_{i+1,j+1,(2st+1)\&2^m},dp_{i+1,j,(2st)\&2^m}\)乘上那......
  • 题解 //「BZOJ2406」矩阵
    赛时公告现在呢?:现在有弹窗了吗「2023-07-1916:45:07」此时无声胜有声。F.「BZOJ2406」矩阵http://222.180.160.110:1024/contest/3825/problem/7这是头一次见识到把矩阵和网络流结合在一起的题目。不过这种处理方式也是我们在学习二分图时的常客了:把行和列连边表示某一元......
  • 【题解】Luogu[P3360] 偷天换日
    solution开题显然是个树形dp,只不过在树形dp上又增加了背包问题。我们不妨将每个走廊看成一个点,把交叉口看成边(当然也可以把交叉口看成点,不过写起来麻烦一些),于是就转化为了一棵二叉树。我们设\(f_{i,j}\)表示以\(i\)为根的子树内,花费了不超过\(j\)时间,能拿到的最大价值......
  • Frog 3 题解
    Frog3题目大意题意都这么明确了还要这个干什么。存在\(n\)个点,每个点有一个属性\(h_i\),\(h_i\)单增,从点\(i\)移动到点\(j(j>i)\)的代价是\((h_i-h_j)^2+C\),其中\(C\)是给定的常数,求从点\(1\)移动到点\(n\)的最小代价。思路分析斜率优化DP板题。设\(f_i\)......
  • SP10582 题解
    题目链接题意简述给定一个有\(n\)个数的数组,求从第一个数字开始,向后每\(k\)个数字的最大值。题目分析看到没有人用ST表做那我就来发一个吧。这道题可以用ST表做。它可以在经过\(O(N\logN)\)的预处理后,以\(O(1)\)的时间在线回答下标在\(l\)到\(r\)之间的数......