[CF938E]Max History题解
解法
显而易见,对于一个数\(a_i\),若果它出现在\(f\)序列中,必定\(a_i\)之前的元素要小于\(a_i\),我们设\(cnt_i\)为序列\(a\)中小于\(i\)的元素,
那么得到\(\sum_{i=1}^n a_i \times (\sum_{j=1}^{cnt_i+1} \frac{cnt_i!}{(j-1)!\times(cnt_i-j+1)!} \times (j - 1)! \times (n-j)!)\)
化简得\(\sum_{i=1}^n a_i \times (\sum_{j=1}^{cnt_i+1} \frac{cnt_i!}{(cnt_i-j+1)!} \times (n-j)!)\)
然后提出\(cnt_i!\)得\(\sum_{i=1}^n a_i \times cnt_i! \times ( \sum_{j=1}^{cnt_i+1} \frac{(n-j)!}{(cnt_i-j+1)!})\)
提取一个\((n-cnt_i-1)!\)得\(\sum_{i=1}^n a_i \times cnt_i! \times (n-cnt_i-1) \times ( \sum_{j=1}^{cnt_i+1} (^{n-j}_{n-cnt_i-1}))\)
又可得\(\sum_{i=1}^n a_i \times cnt_i! \times (n-cnt_i-1) \times (^n_{n-cnt_i})\)
所以答案为\(\sum_{i=1}^n \frac{a_i*n!}{n-l_i}\)
代码
#include <cstdio>
#include <algorithm>
#define ll long long
#define MOD 1000000007
using namespace std;
ll jc[1000005], jcr[1000005];
ll a[1000005];
int main(){
int n; scanf("%d", &n);
for(ll i = 1; i <= n; ++i)
scanf("%lld", &a[i]);
jc[0] = jcr[n + 1] = 1;
for(int i = 1; i <= n + 1; ++i)
jc[i] = (jc[i - 1] * i) % MOD;
for(int i = n; i >= 1; --i)
jcr[i] = (jcr[i + 1] * i) % MOD;
sort(a + 1, a + n + 1);
ll ans = 0; int cur_val = 0, cnt = 0;
for(int i = 1; a[i] != a[n]; ++i){
(a[i] == a[i - 1]) ? (++cnt) : (cur_val += cnt, cnt = 1);
ans += (((jc[n - cur_val - 1] * jcr[n - cur_val + 1]) % MOD) * a[i]) % MOD, ans %= MOD;
}
printf("%lld", ans); return 0;
}
[CF938E]Max History题解的更多相关文章
- 【计数】cf938E. Max History
发现有一种奇怪的方法不能快速预处理? 复习一下常见的凑组合数的套路 You are given an array a of length n. We define fa the following w ...
- CodeForces 938E Max History 题解
参考自:https://blog.csdn.net/dreaming__ldx/article/details/84976834 https://blog.csdn.net/acterminate/a ...
- Hdoj 1003.Max Sum 题解
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- Codeforces 938E Max History:排列 + 逆元【考虑单个元素的贡献】
题目链接:http://codeforces.com/problemset/problem/938/E 题意: 定义f(a): 初始时f(a) = 0, M = 1. 枚举i = 2 to n,如果a ...
- luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)
链接一下题目:luoguP3128 [USACO15DEC]最大流Max Flow(树上差分板子题) 如果没有学过树上差分,抠这里(其实很简单的,真的):树上差分总结 学了树上差分,这道题就极其显然了 ...
- 2018.12.12 codeforces 938E. Max History(组合数学)
传送门 唉最开始居然把题给看错了. 其实是组合数学傻逼题呢. 题意简述:给出一个数列,定义一个与数列有关的fff函数,fff函数定义如下: 首先f=0,M=1f=0,M=1f=0,M=1,一直重复如下 ...
- Max History CodeForces - 938E (组合计数)
You are given an array a of length n. We define fa the following way: Initially fa = 0, M = 1; for e ...
- CF1083C Max Mex 线段树
题面 CF1083C Max Mex 题解 首先我们考虑,如果一个数x是某条路径上的mex,那么这个数要满足什么条件? 1 ~ x - 1的数都必须出现过. x必须没出现过. 现在我们要最大化x,那么 ...
- Educational Codeforces Round 38 部分题解
D. Buy a Ticket 分析 建一个源点,连向所有结点,边的花费为那个结点的花费,图中原有的边花费翻倍,最后跑一遍最短路即可. code #include<bits/stdc++.h&g ...
随机推荐
- chrome 74 版本的chromedriver下载地址
微信扫二维码关注我的公众号,回复chromedriver 即可获取windows,liunx,mac版本最新selenium-chromedriver
- 【ABAP系列】SAP 系统的消息类型分析 MESSAGE TYPE
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 系统的消息类型分析 ME ...
- 【EWM系列】SAP EWM中仓库任务WT创建的函数
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[EWM系列]SAP EWM中仓库任务WT创建的 ...
- sentos7忘记root密码,重置密码
一.两种模式:单用户模式和救援模式 下面示例救援模式 1.重启linux系统主机并出现引导界面,按e键进入内核编辑界面: 2.在linux16参数那一行的最后面追加“rd.break”参数,记住要空开 ...
- Centos 安装Jenkins的坎坷
安装Jenkins(简单复制即可) wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.rep ...
- 使用logstash收集java、nginx、系统等常见日志
目录 1.使用codec的multiline插件收集java日志... 1 2.收集nginx日志... 2 3.收集系统syslog日志... 3 4.使用fliter的grok模块收集mysql日 ...
- linux--vm安装
网络排错图解 https://www.linuxidc.com/Linux/2017-03/141863.htm net模式 https://www.linuxidc.com/Linux/2017-0 ...
- C++中的const分析
1,C 语言中的 const: 1,const 修饰的变量是只读的,本质还是变量: 1,C 语言中的 const 使变量具有只读属性: 2,const 只在编译期有用,在运行期无用: 3,const ...
- 基于 Redux + Redux Persist 进行状态管理的 Flutter 应用示例
好久没在 SegmentFault 写东西,唉,也不知道 是忙还是懒,以后有时间 再慢慢写起来吧,最近开始学点新东西,有的写了,个人博客跟这里同步. 一直都在自己的 React Native 应用中使 ...
- Delphi中各个包中包含的控件
经常有朋友提这样的问题,“我原来在delphi5或者delphi6中用的很熟的控件到哪里去了?是不是在delphi7中没有了呢?这是不是意味着我以前写的代码全都不能够移植到delphi7中来了呢?是不 ...