背景

自从芽衣、布洛妮娅相继灵魂觉醒之后,琪亚娜坐不住了。自己可是第一个入驻休伯利安号的啊!于是她打算去找德丽莎帮忙,为她安排了灵魂觉醒的相关课程。

第一天,第一节课。

“实现灵魂觉醒之前,你需要先将自己的崩坏能按顺序排好……”

“诶诶,这个要怎么做呢?”算法课没认真听讲也是没有办法的嘛。

于是,琪亚娜设(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 灵魂觉醒的更多相关文章

  1. 汕头市队赛SRM 20 T2不净的圣杯

    不净的圣杯 SRM 20 背景 作为一张BUG级别的卡,官方打算把它修改得人畜无害一些…… 虽然名字还没想好,但是能力大概是对敌方所有单位造成d点伤害,d为自己牌组中所有卡的编号的最大公约数.这无疑是 ...

  2. 汕头市队赛SRM 20 T1魔法弹

    T1 背景 “主角光环已经不能忍啦!” 被最强控制AP博丽灵梦虐了很长一段时间之后,众人决定联合反抗. 魂魄妖梦:“野怪好像被抢光了?” 十六夜咲夜:“没事,我们人多.” 然后当然是以失败告终了. 八 ...

  3. 汕头市队赛 SRM 07 B 好玩的麻将

    B 好玩的麻将 SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂.     KPM上周又打了n场麻将,又控了分使得自己的排名是1..n的一个排列.     但她 ...

  4. 汕头市队赛 SRM 07 D 天才麻将少女kpm

    这道题放了很久还是回来补了 D 天才麻将少女KPM SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂.     KPM上周叒打了n场麻将,但她这次又没控分,而且 ...

  5. 汕头市队赛 SRM 06 C 秀恩爱

    C 秀恩爱 SRM 06 背景&&描述         KPM坐在直升机上俯瞰小渔村景象.         渔村可看作二维平面,密密麻麻地到处都是单身狗,KPM当前所在坐标为(sx,s ...

  6. 汕头市队赛 SRM 06 A 撕书

    A 撕书 SRM 06 背景&&描述 游行寺汀正在杀书.         书总共有n页,每页都可以看作是一个小写英文字母,所以我们可以把书看成长度为n的字符串s.         琉璃 ...

  7. 汕头市队赛 SRM 06 B 起伏的排名

    B 起伏的排名 SRM 06 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂.     在上个星期她打了n场麻将,每场麻将都有n名玩家.KPM自然记得自己的n次排名.   ...

  8. 汕头市队赛 SRM 08 B

    B-3 SRM 08 描述 给长度为 n 的数列 A 和长度为 m 的数列 B,问有多少长度为 m 的数列 C 满足 输入格式 第一行俩整数 n 和 m 第二行 n 个整数 ,表示数列 A 第三行 m ...

  9. 汕头市队赛 SRM 08 C

    C-3 SRM 08 描述 给一个图,n 个点 m 条双向边,每条边有其长度.n 个点中有 k 个是特殊点,问任意两个特殊点的最短路是多少. 输入格式 第一行三个整数 n m k 第二行 k 个整数  ...

随机推荐

  1. TensorFlow高级API(tf.contrib.learn)及可视化工具TensorBoard的使用

    一.TensorFlow高层次机器学习API (tf.contrib.learn) 1.tf.contrib.learn.datasets.base.load_csv_with_header 加载cs ...

  2. DAY2敏捷冲刺

    站立式会议 工作安排 (1)服务器配置 (2)数据库连接 (3)页面创意 燃尽图 代码提交记录 感想 林一心:centos配置服务器真的算是一个不小的坑,目前数据库配置清楚,脚本部署好明天测试交互,还 ...

  3. java — 值传递和引用传递

    在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数.参数可以是对象引用,而 Java ...

  4. 第三章——供机器读取的数据(XML)

    本书使用的文件.代码:https://github.com/huangtao36/data_wrangling 机器可读(machine readable)文件格式: 1.逗号分隔值(Comma-Se ...

  5. (十一)instanceof 和 getclass 的区别

    判断两个对象是否为同一类型,时常用到getclass 和 instanceof ,而这两个函数又是时常让人混淆.下面从一个例子说明两者的区别: public class Test_drive { pu ...

  6. CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务

    环境 VMware版本号:12.0.0 CentOS版本:CentOS 7.3.1611 三台虚拟机(IP):192.168.252.101,192.168.102..102,192.168.252. ...

  7. array_intersect_assoc 与array_intersect区别

    1.array_intersect_assoc — 带索引检查计算数组的交集 说明 array array_intersect_assoc ( array $array1 , array $array ...

  8. 限制玻尔兹曼机(Restricted Boltzmann Machine)RBM

    假设有一个二部图,每一层的节点之间没有连接,一层是可视层,即输入数据是(v),一层是隐藏层(h),如果假设所有的节点都是随机二值变量节点(只能取0或者1值)同时假设全概率分布满足Boltzmann 分 ...

  9. BZOJ2038:[2009国家集训队]小Z的袜子——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找 ...

  10. HDOJ.2084 数塔(DP)

    数塔 点我挑战题目 题意分析 DP的思想,自上而下计算. [这几天比较忙 有空补上] 代码总览 /* Title:HDOJ.2084 Author:pengwill Date:2017-1-14 */ ...