51nod-1670-打怪兽(递推/组合数学)
游戏的规则是这样的。
lyk一开始会有一个初始的能量值。每次遇到一个怪兽,若lyk的能量值>=怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束。
若怪兽全部打完,游戏也将会结束。
共有n个怪兽,由于lyk比较弱,它一开始只有0点能量值。
n个怪兽排列随机,也就是说共有n!种可能,lyk想知道结束时它能量值的期望。
由于小数点比较麻烦,所以你只需要输出期望*n!关于1000000007取模后的值就可以了!
第一行一个数n(1<=n<=100000)。
接下来一行n个数ai表示怪兽的能量(0<=ai<n)。
一行表示答案
2
0 1
2 哎碰见数学就gg,刚开始以为答案就是方案个数和,后来才明白是总得分之和,就是所有情况对应的得分之和。
令f[i]表示过了第i层之后还没死的当前方案个数,有f[i]=f[i-1]*x%MOD, x表示在第i层可以打过的怪兽数量,x=tot[i-1]-(i-1)//因为前i-1层打过了i-1只所以要减去。
然后统计在第i层死亡的方案个数乘上得分(i-1)累加到答案上即可,最后记得加上得分为i的情况,也就是打过了所有的怪兽。
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
#define LL long long
LL MOD=;
LL jc[];
LL a[];
LL tot[];
LL f[];
int main(){
LL i,j,k,n;
jc[]=;
for(LL i=;i<=;++i)
jc[i]=jc[i-]*i%MOD;
cin>>n;
for(i=;i<=n;++i) scanf("%lld",a+i),tot[a[i]]++;
for(i=;i<=n;++i) tot[i]+=tot[i-];
f[]=;
LL ans=;
for(i=;i<n;++i){
LL x=tot[i]-i;
LL y=tot[n]-tot[i];
f[i+]=f[i]*x%MOD;//到第i+1轮仍存活的方案个数
LL tmp=f[i]*y%MOD*jc[n-i-]%MOD*i%MOD;
ans+=tmp;
ans%=MOD;
}
ans+=f[n]*n;
ans%=MOD;
cout<<ans<<endl;
return ;
}
51nod-1670-打怪兽(递推/组合数学)的更多相关文章
- 51nod 1149 Pi的递推式(组合数学)
传送门 解题思路 首先因为\(Pi\)不是整数,所以不能直接递推.这时我们要思考这个式子的实际意义,其实\(f(i)\)就可以看做从\(i\)这个点,每次可以向右走\(Pi\)步或\(1\)步,走到[ ...
- BZOJ4451 [Cerc2015]Frightful Formula 多项式 FFT 递推 组合数学
原文链接http://www.cnblogs.com/zhouzhendong/p/8820963.html 题目传送门 - BZOJ4451 题意 给你一个$n\times n$矩阵的第一行和第一列 ...
- UVa 12034 Race (递推+组合数学)
题意:A,B两个人比赛,名次有三种情况(并列第一,AB,BA).输入n,求n个人比赛时最后名次的可能数. 析:本来以为是数学题,排列组合,后来怎么想也不对.原来这是一个递推... 设n个人时答案为f( ...
- 51nod 1149 Pi的递推式 组合数
题目大意: \(F(x) = 1 (0 \leq x < 4)\) \(F(x) = F(x-1) + F(x-\pi) (4 \leq x)\) 给定\(n\),求\(F(n)\) 题解: 我 ...
- ACM学习历程—BestCoder 2015百度之星资格赛1001 大搬家(递推 && 组合数学)
Problem Description 近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上.指示的内容是坐在位置i 上的人要搬到位置j 上.现在B厂有N 个人,一对一到N 个位置上.搬家之后 ...
- ACM学习历程—NPU1045 2015年陕西省程序设计竞赛网络预赛(热身赛)C题 Graph Theory(递推 && 组合数学 && 大数)
Description In graph theory, a matching or independent edge set in a graph G = (V , E) is a set of e ...
- POJ-3421 X-factor Chains---求因子+递推 或 素因子+组合数学
题目链接: https://vjudge.net/problem/POJ-3421 题目大意: 给你一个数X,将X分解成1~X的因子数列,前一个数可以整数后一个数,求满足条件的最大链长以及有多少条这样 ...
- 51nod 1639 递推
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1639 1639 绑鞋带 基准时间限制:1 秒 空间限制:131072 K ...
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
题目: 看起来比较难,范围10^9 O(n)都过不了,但是仅仅是看起来.(虽然我WA了7次 TLE了3次,被自己蠢哭) 我们观察到 0 <= f[i] <= 6 就简单了,就像小学初中学的 ...
随机推荐
- matplotlib绘制柱状图
参考自Matplotlib Python 画图教程 (莫烦Python)(11)_演讲•公开课_科技_bilibili_哔哩哔哩 https://www.bilibili.com/video/av16 ...
- Linux系统——日志文件
日志文件的分类 (1)内核及系统日志 由系统服务rsyslog管理,根据去主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置. /etc/rsyslog ...
- windows计划任务定时运行synctoy的坑
每次设置好synctoy之后,需要让synctoy运行一次,windows的计划任务才能成功执行,如果变更了synctoy的设置,而没有让synctoy成功执行过,windows计划任务将执行失败,坑 ...
- Python+Appium API
1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...
- C#小票打印机动态纸张尺寸
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Python学习示例源码
函数和函数式编程 函数定义: 函数调用: 过程定义: 过程调用: 面向过程的编程方法: """ 面向对象-----类------class 面向过程-----过程---- ...
- PHP中构造函数和析构函数解析
构造函数 void __construct ([ mixed $args [, $... ]] ) PHP 5 允行开发者在一个类中定义一个方法作为构造函数.具有构造函数的类会在每次创建新对象时先调用 ...
- java中数组以及集合
java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5] a是在java栈中分配的引用变量,类型是int[ ...
- Web安全学习笔记之Openvas配置,使用,报告
OpenVAS(开放式漏洞评估系统)是一个客户端/服务器架构,它常用来评估目标主机上的漏洞.OpenVAS是Nessus项目的一个分支,它提供的产品是完全地免费.OpenVAS默认安装在标准的Kali ...
- 设置 vadio 和checkbox是否选中
1.js方案 <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>te ...