CF891E-Lust【EGF】
正题
题目链接:https://www.luogu.com.cn/problem/CF891E
题目大意
\(n\)个数字的一个序列\(a_i\),每次随机选择一个让它减去一。然后贡献加上所有其他\(a_i\)的乘积。
执行\(k\)次,求贡献答案。
\(1\leq n\leq 5000,0\leq a_i,k\leq 10^9\)
解题思路
这个操作很麻烦,但是其实答案就是开始时所有\(a_i\)的乘积减去结束时所有\(a_i\)的乘积。
设第\(i\)个数减去了\(b_i\)次,就是求\(\prod_{i=1}^na_i-\prod_{i=1}^n(a_i-b_i)\)的期望,考虑怎么求后面那个东西。
推一下式子不难发现对于一组\(b_i\)对期望的贡献就是
\]
(总方案×可重排方案×贡献)
把\(\prod_{i=1}^n(b_i!)\)丢进去会有很神奇的结果
\]
因为每种方案都要求和,后面那个东西显然可以生成函数搞,设
\]
好像就搞不动了,前面那个是\(a_ze^{x}\),其实后面那个把\(i\)抵消掉阶乘就是\(xe^{x}\)
\]
然后\(\widehat{F}=\prod_{i=1}^n\widehat{f_z}\),可以暴力\(O(n^2)\)乘出\(\prod_{i=1}^n(a_z-x)\)这部分,记为\(\sum_{i=0}^{\infty}c_ix^i\)。
然后展开后面的\(e^x\)就有
\]
然后
\]
就好了,时间复杂度\(O(n^2)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5100,P=1e9+7;
ll n,k,f[N],ans;
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
signed main()
{
scanf("%lld%lld",&n,&k);f[0]=1;
for(ll i=1;i<=n;i++){
ll x;scanf("%lld",&x);
for(ll j=i;j>=1;j--)
f[j]=(f[j]*x-f[j-1]+P)%P;
f[0]=f[0]*x%P;
}
ll tt=1,inv=power(n,P-2);
for(ll i=0;i<=n;i++){
ans=(ans+f[i]*tt%P)%P;
tt=tt*inv%P*(k-i)%P;
}
printf("%lld\n",(f[0]-ans+P)%P);
return 0;
}
CF891E-Lust【EGF】的更多相关文章
- P2012-拯救世界2【EGF】
正题 题目链接:https://www.luogu.com.cn/problem/P2012 题目大意 \(12\)种东西排列成长度为\(n\)的序列,要求前四种出现奇数次,后四种出现偶数次,求方案. ...
- POJ3734-Blocks【EGF】
正题 题目链接:http://poj.org/problem?id=3734 题目大意 用思种颜色给\(n\)个格子染色,要求前两种颜色出现偶数次,求方案. \(1\leq T\leq 100,1\l ...
- 【BZOJ4555】求和(多种解法混合版本)
[BZOJ4555]求和(多种解法混合版本) 题面 BZOJ 给定\(n\),求 \[f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i}S(i,j)\times 2^j \times ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
随机推荐
- 是的你没看错,HTTP3来了
目录 简介 HTTP成长介绍 不同HTTP协议解决的问题 HTTP3和QUIC TLS1.3 解决HoL阻塞 连接的迁移 总结 简介 很多小伙伴可能还沉浸在HTTP1.1的世界无法自拔,但是时代的洪流 ...
- Jsoup类
一.简介 Jsoup是一款HTML解析器,可以直接解析url地址,也可以解析html文本内容.也可通过DOM.CSS以及类似于jQuery的操作方法来取出和操作数据.其主要功能: 1.从url.字符串 ...
- Oracle插入中文乱码问题
PLSQL执行一条插入代码,两个字符既显示超长,一个字符插入后乱码 insert into person (pid, pname) values (1,'明'); Google查询说原因是Oracle ...
- ArrayList线程不安全怎么办?(CopyOnWriteArrayList详解)
ArrayList线程不安全怎么办? 有三种解决方法: 使用对应的 Vector 类,这个类中的所有方法都加上了 synchronized 关键字 就和 HashMap 和 HashTable 的关系 ...
- 使用Visual Studio分析dump
最近系统是不是CPU会飙升的百分之九十多甚至百分百,在本地又很难复现问题,无法定位问题出现在哪. 可以用转储文件来保存现场,然后通过分析dump文件可以大概分析出问题的所在 生成转存文件 在CPU飙升 ...
- for in和for of的简单区别
//for in可以遍历数组和对象,但是for of只能遍历数组,不可以遍历对象 var arr = [1,4,5,6,7,8]; var obj = { name:'za', age:19, say ...
- Learning ROS: Ubuntu16.04下kinetic开发环境安装和初体验 Install + Configure + Navigating(look around) + Creating a Package(catkin_create_pkg) + Building a Package(catkin_make) + Understanding Nodes
本文主要部分来源于ROS官网的Tutorials. Ubuntu install of ROS Kinetic # Setup your sources.list sudo sh -c 'echo & ...
- Python语法之选择和循环(if、while)
前言:在程序开发中,一共有三种流程方式: 顺序:从上向下,顺序执行代码 分支:根据条件判断,决定执行代码的分支 循环:让特定代码重复执行(解决程序员重复工作) 1.判断的定义: 如果条件满足,才能做某 ...
- Android中TextView和EditView常用属性设置
Android中TextView和EditView常用属性设置 点击跳转
- python 中最好用的身份证规则解析工具,地区码、性别、出生年月、身份证编码等快速校验!
安装并导入依赖库 # pip install parseIdCard from parseIdCard import parseIdCard from pprint import pprint 地区码 ...