汕头市队赛SRM 20 T3 灵魂觉醒
背景
自从芽衣、布洛妮娅相继灵魂觉醒之后,琪亚娜坐不住了。自己可是第一个入驻休伯利安号的啊!于是她打算去找德丽莎帮忙,为她安排了灵魂觉醒的相关课程。
第一天,第一节课。
“实现灵魂觉醒之前,你需要先将自己的崩坏能按顺序排好……”
“诶诶,这个要怎么做呢?”算法课没认真听讲也是没有办法的嘛。
于是,琪亚娜设(xia)计(bian)了一套自己的排序方法。
描述
我们可以用n张卡片代表崩坏能,上面恰好写了1到n。
一开始这些卡片是随机排列的,然后为了把它们从小到大排好序,进行如下操作:
①如果卡片已经按1到n排好序,结束操作。
②观察现有排列,如果某一个大于1的区间内的数是顺序加一的,就把这个区间内的卡片粘起来,它们在以后的操作中不会分开。(比如15234这个排列会把234粘起来)
③把所有卡片随机排列(粘在一起的不分开),然后回到①。
恰好路过的符华对这种排序方法非常感兴趣,希望知道它的期望复杂度。于是求期望进行③操作的次数的任务就交给你了。答案对1e9+7取模。
输入格式
一个不超过2000的整数n。
输出格式
一个整数,答案对1e9+7取模后的结果。
样例输入
3
样例输出
333333338
数据范围与约定
| 测试点 | n |
| 1 | 1 |
| 2 | 5 |
| 3 | 8 |
| 4 | 10 |
| 5 | 13 |
| 6 | <=1000 |
| 7 | <=1000 |
| 8 | <=2000 |
| 9 | <=2000 |
| 10 | <=2000 |
样例解释
n=3时的精确值是
后记:
琪亚娜·卡斯兰娜:你们是怎么排序的啊?
雷电芽衣:有个库函数叫sort来着……
布洛妮娅:对,挺快的。
————————————————————————————
这题一开始我想着暴力 ans[x]=sigma g[x][y]*ans[y]
g[x][y]表示长度为x的排列 排一次之后缩成y段的概率
g[x][y]可以暴力算 不过后来打表发现是个组合数 然后就可以A辣
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
const int M=2e3+,mod=1e9+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,k;
int g[M][M];
LL w[M],inv[M];
LL pmod(LL a,LL b){
int ans=;
while(b){
if(b&) ans=ans*a%mod;
b>>=; a=a*a%mod;
}
return ans;
}
void prepare(){
w[]=; for(int i=;i<=n;i++) w[i]=w[i-]*i%mod;
inv[n]=pmod(w[n],mod-);
for(int i=n;i;i--) inv[i-]=inv[i]*i%mod;
}
int f[M],v[M],s[M],ans[M];
void P(int &x){x=(x%mod+mod)%mod;}
int main(){
n=read(); prepare();
for(int j=;j<=n;j++){
g[j][j]=w[j]-s[j]; P(g[j][j]);
for(int i=j+;i<=n;i++){
g[i][j]=g[j][j]*(w[i-]*inv[j-]%mod*inv[i-j]%mod)%mod; P(g[i][j]);
s[i]+=g[i][j]; P(s[i]);
}
}
ans[]=;
for(int i=;i<=n;i++){
LL ly=;
for(int j=;j<i;j++) ly=(ly+1LL*g[i][j]*inv[i]%mod*(ans[j]+)%mod)%mod;
ans[i]=((ly+g[i][i]*inv[i]%mod)*pmod((-g[i][i]*inv[i]%mod+mod)%mod,mod-))%mod;
}printf("%d\n",ans[n]);
return ;
}
汕头市队赛SRM 20 T3 灵魂觉醒的更多相关文章
- 汕头市队赛SRM 20 T2不净的圣杯
不净的圣杯 SRM 20 背景 作为一张BUG级别的卡,官方打算把它修改得人畜无害一些…… 虽然名字还没想好,但是能力大概是对敌方所有单位造成d点伤害,d为自己牌组中所有卡的编号的最大公约数.这无疑是 ...
- 汕头市队赛SRM 20 T1魔法弹
T1 背景 “主角光环已经不能忍啦!” 被最强控制AP博丽灵梦虐了很长一段时间之后,众人决定联合反抗. 魂魄妖梦:“野怪好像被抢光了?” 十六夜咲夜:“没事,我们人多.” 然后当然是以失败告终了. 八 ...
- 汕头市队赛 SRM 07 B 好玩的麻将
B 好玩的麻将 SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. KPM上周又打了n场麻将,又控了分使得自己的排名是1..n的一个排列. 但她 ...
- 汕头市队赛 SRM 07 D 天才麻将少女kpm
这道题放了很久还是回来补了 D 天才麻将少女KPM SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. KPM上周叒打了n场麻将,但她这次又没控分,而且 ...
- 汕头市队赛 SRM 06 C 秀恩爱
C 秀恩爱 SRM 06 背景&&描述 KPM坐在直升机上俯瞰小渔村景象. 渔村可看作二维平面,密密麻麻地到处都是单身狗,KPM当前所在坐标为(sx,s ...
- 汕头市队赛 SRM 06 A 撕书
A 撕书 SRM 06 背景&&描述 游行寺汀正在杀书. 书总共有n页,每页都可以看作是一个小写英文字母,所以我们可以把书看成长度为n的字符串s. 琉璃 ...
- 汕头市队赛 SRM 06 B 起伏的排名
B 起伏的排名 SRM 06 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. 在上个星期她打了n场麻将,每场麻将都有n名玩家.KPM自然记得自己的n次排名. ...
- 汕头市队赛 SRM 08 B
B-3 SRM 08 描述 给长度为 n 的数列 A 和长度为 m 的数列 B,问有多少长度为 m 的数列 C 满足 输入格式 第一行俩整数 n 和 m 第二行 n 个整数 ,表示数列 A 第三行 m ...
- 汕头市队赛 SRM 08 C
C-3 SRM 08 描述 给一个图,n 个点 m 条双向边,每条边有其长度.n 个点中有 k 个是特殊点,问任意两个特殊点的最短路是多少. 输入格式 第一行三个整数 n m k 第二行 k 个整数 ...
随机推荐
- iOS- xib(nib) 的重用(在有些情况下有利于加快项目功能的实现)
0.前言 在项目开发中,我们经常会碰到,某些视图View 内部基本空间都一样,只是数据不同,这时,我们可以用xib来将这个视图封装起来多次重用, (例如,大小固定 控件固定的TableViewCell ...
- 华为oj----iNOC产品部-杨辉三角的变形 .
此题提供三种方法,第一种,一开始就能想到的,设置一个足够大的数组存储生成的杨辉三角,然后进行判断就行,此方法参见:华为oj iNOC产品部-杨辉三角的变形 另一种方法是采用递归: 三角形的每行的个数为 ...
- dev_queue_xmit 发生了什么?skb还会在哪里缓存
见 codebox/net/qdisk/xmit.log中保存了一份记录 调用关系 sch_direct_xmit --> dev_hard_start_xmit --> xmit_one ...
- array to object
array to object native js & ES6 https://stackoverflow.com/questions/4215737/convert-array-to-obj ...
- TCP协议的滑动窗口具体是怎样控制流量的
首先明确: 1)TCP滑动窗口分为接受窗口,发送窗口滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没 ...
- poj3074-Sodoku
解数独. 分析 考虑如何把数独解合法的条件转化为经典的01精确覆盖: 每个格子只能填一个数,1-9 每一列刚好填了1-9 每一行刚好填了1-9 每个九宫格刚好填了1-9 也就是说,每个格子,列,行,九 ...
- BZOJ 1486 最小圈(01分数规划)
好像是很normal的01分数规划题.最小比率生成环. u(c)=sigma(E)/k.转化一下就是k*u(c)=sigma(E). sigma(E-u(c))=0. 所以答案对于这个式子是有单调性的 ...
- 【hdu3555】Bomb 数位dp
题目描述 求 1~N 内包含数位串 “49” 的数的个数. 输入 The first line of input consists of an integer T (1 <= T <= 1 ...
- Django 2.0 学习(13):Django模板继承和静态文件
Django模板继承和静态文件 模板继承(extend) Django模板引擎中最强大也是最复杂的部分就是模板继承了,模板继承可以让我们创建一个基本的"骨架"模板,它可以包含网页中 ...
- JS作用域-面向对象
1. 其它语言是以代码块作为作用域的.下面程序会报错(如C,C++中),因为局部变量name只在{ }代码块中生效.打印console.writeline(name)中的name时就会报错. pu ...