首页 > 其他分享 >牛客小白月赛61 E.排队(组合数学)

牛客小白月赛61 E.排队(组合数学)

时间:2022-11-23 19:34:16浏览次数:46  
标签:排列 牛客 int over 61 tbinom 小白月赛 序数

题目大意:

对于n个数,求其所有可能排列中的逆序数之和


解题思路:

求每种排列逆序数之和,因为数字的顺序在变化,这对我们去计算总和很不利,所以我们转换思路我们可以先考虑数对(a,b)逆序数对整体的贡献(先固定住数)
(a,b)可以形成的排列有C\(\tbinom{1}{n}\)*C\(\tbinom{1}{n-1}\)*A\(\tbinom{1}{n}\)种(组合数,n个位置里选一个放a,n-1个位置里选一个放b,剩下(n-2)个数随机排列)但是因为我们只要逆序数,因为<a,b>和<b,a>各有二分之一的可能,我们只要a>b的,所以逆序数排列有:\({{n*(n-1)*(n-2)!} \over {2}}\)
然后总和就为:\(\displaystyle \sum _{i=0}^{i = cnt}{{n*(n-1)*(n-2)!} \over {2}}\),也就是每一对(a,b)都会有相同的贡献,剩下的只需要计算有多少对(a,b)即可


代码实现:

# include<bits/stdc++.h>
using namespace std;
# define int long long
const int  N = 1e5+10,mod = 1e9+7;
int a[N];
int b[N];
signed main(){
    int n;
    cin>>n;
    b[1] = 1;
    for(int i = 2;i <= N;++i) b[i] = b[i-1]*i%mod;\\预处理阶乘
    for(int i = 1;i <= n;++i) cin>>a[i];
    if(n == 1) {
        cout<<0<<endl;
        return 0;
    }
    int p = (n*(n-1)/2)%mod*b[n-2]%mod;\\求贡献
    int cnt = 0;
    sort(a+1,a+1+n);
    for(int i = 1;i <= n;++i){
        int pos = lower_bound(a+1,a+1+n,a[i])-(a+1);\\计算数对
        cnt += pos;
    }
    p = p*cnt%mod;\\总贡献
    cout<<(p+mod)%mod<<endl;   
    return 0;
}

标签:排列,牛客,int,over,61,tbinom,小白月赛,序数
From: https://www.cnblogs.com/empty-y/p/16919549.html

相关文章

  • 2021牛客OI赛前集训营-提高组(第四场)总结
    概述预估得分:\(100+100+30+50=280\)实际得分:\(30+50+30+45=165\)T1最终测试题目大意\(n\)名选手,第\(i\)名选手的得分有\(0,\;a_{i,0},\;a_{i,......
  • 4G 安卓智能核心板 XY610 (虎贲T610平台)
     紫光展锐虎贲T610采用12nm制程工艺,由两颗1.8GHz的armCortex-A75CPU和六颗1.8GHz的ArmCortex-A55处理器组成,GPU采用的是614.4MHz的MaliG52。​XY610 是一款基......
  • C2614
    template<classT>Unknown::ArrayOrder<T>::ArrayOrder(unsignedintuiGrowBy):MArray(uiGrowBy){}以上代码报c2614,问题出在粗心没有给父类加上泛型。templ......
  • 树形背包 / 树形DP(牛客 - 蓝魔法师)
    一般的树形背包问题,往往与以下模板异曲同工。复杂度为\(O(n^3)\)voiddfs(intu){ sz[u]=1; for(autov:G[u]) { dfs(v);sz[u]+=sz[v]; for(intj=sz[......
  • 难题(1761E)
    题目链接题目大一:保证是一个完整图,输出最小操作数。 AC代码:、#include<bits/stdc++.h>#definemod1000000007usingnamespacestd;inte[4010][4010],fa[4010......
  • 牛客小白月赛61 F 尺取法 前缀和
    题目的描述是多维的即有人数限制又有座位限制。但是每次选座位是连续的,这意味着可以利用尺取法贪心的求出以每个左端点为起始最小的合法的右端点。考虑如何求f(x)即x人......
  • python(牛客)试题解析2 - 中等
    导航一、NC192二叉树的后序遍历二、NC117 合并二叉树三、求长度最长的的连续子序列使他们的和等于sum四、按顺序取出固定长度内容并合并两个数组为一个新数组五、输......
  • 牛客小白月赛 61 题解
    前言以下内容转自官方首先,十分抱歉给大家带来了不好的比赛体验,下面是比赛中出的大锅。锅1:B题是出题人在读CSAPP时想到的一道小模拟,但在题目描述时出了问题,应该......
  • 牛客小白月赛61 B柜台结账
    原题链接#include<stdio.h>#include<string.h>#include<stdlib.h>constintN=1e5+10;chara1[N],a2[N];//分别为a1和a2的字符串intlena,lenb;//分别为a1和a2的字......
  • LTC1861HMS#TRPBF LTC1861HMS模数转换器 12 bit 250ksps ADC
    LTC1860/LTC1861是12位A/D转换器,提供MSOP和SO-8包,并在单个5V电源上工作。在250ksps时,电源电流只有850μA。由于LTC1860/LTC1861在转换之间自动降低到典型的1nA电源电流,所......