E 排队(排列组合)[牛客小*白月赛61]
创始人
2024-04-09 18:13:02
0

题面如下:

在这里插入图片描述
在这里插入图片描述

思路 or 题解:

对于一个长度为 nnn 的 排列组合
如果存在一对 逆序对 (x,y)(x, y)(x,y)
xxx 在 yyy 的前面有 n∗(n−1)2\frac{n * (n - 1)}{2}2n∗(n−1)​ 种情况
剩下 n−2n - 2n−2 个位置可以随意填数进去,不会影响到逆序对 (x,y)(x, y)(x,y)

所以答案是:
(n−2)!×n∗(n−1)2×逆序对的个数(n - 2) ! \times \frac{n * (n - 1)}{2} \times 逆序对的个数(n−2)!×2n∗(n−1)​×逆序对的个数

AC代码如下:

const int mod = 1e9 + 7;
const int N = 100009;
int n, s[N];
int sum[N];
int ksm(int a, int b)
{int res = 1;while (b){if (b & 1)res = res * a % mod;b >>= 1;a = a * a % mod;}return res;
}
void solve()
{cin >> n;for (int i = 1; i <= n; i++){cin >> s[i];sum[s[i]]++;}for (int i = 1; i <= 100000; i++)sum[i] += sum[i - 1];int num = 0;for (int i = 100000; i >= 1; i--){num = (num + ((sum[i] - sum[i - 1]) * sum[i - 1]) % mod) % mod;}int ans = 1;for (int i = 1; i <= n - 2; i++)ans = ans * i % mod;ans = ans * num % mod;ans = ((ans * n) % mod * (n - 1)) % mod;ans = ans * ksm(2, mod - 2) % mod;cout << ans << '\n';
}
signed main()
{buff;solve();
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...