数学上来先打表 SRM 10

描述

给出 n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案:
1.每条边连接两个不同的点,每两个点之间至多有一条边
2.不存在三个点a,b,c使三个点间两两可以互相到达且两两之间最短距离相等
3.边的长度均为1

输入格式

一行,一个整数n

输出格式

一行,一个整数,表示方案数对1004535809取模的结果。

样例输入

3

样例输出

7

数据范围与约定

对于8组数据,1<=n<=9
对于余下8组数据,10<=n<=2000

样例解释

三个点之间没有边,有1种方案
三个点之间有一条边,有3种方案
三个点之间有两条边,有3种方案

—————————————————————

这道题观察可得这n个数组成的不是环就是链

是环还必须大于3且不能是3的倍数

我们任然可以先预处理出各个阶乘的逆元

T是2关于mod的逆元 这个根据费马小定理可以算出来

f【i】表示大小为i的联通块的个数

如果是链 方案数是 i!/2 这个时候T作为2的逆元就显示出作用辣

至于为什么是i!/2 因为各个点不同我们可以看作是排列而一个排列对应一个方案,一个方案被算两次

如果是环 就是(i-1 )!/2 因为是环我们可以钦定一个数作为起点 剩下i-1个数来排列

当然只有1不符合上述推断 所以要单独考虑

这样处理完之后我们就可以来算答案ans辣

ans【k】=sigma(1-k) f【i】*g【k-i】*C(i-1,j-1);

也就是我们选i个数作为联通快其余随意的总和

至于为什么是C(i-1,j-1)

因为如果固定一个点统计,g就可以每个图只算一次

这样才能保证每个合法方案中只有一个连通块被算到,且只算了一次

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int M=,mod=;
LL read(){
LL 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;
LL T,w[M],b[M],f[M],ans[M];
LL qmod(LL a,LL b,LL c){
LL ans=;
while(b){
if(b&) ans=ans*a%c;
b=b/;
a=a*a%c;
}
return ans;
}
void prepare(){
int mx=; w[]=;
for(int i=;i<=mx;i++) w[i]=w[i-]*i%mod;
b[mx]=qmod(w[mx],mod-,mod);
for(int i=mx;i>=;i--) b[i-]=b[i]*i%mod;
T=qmod(,mod-,mod);
}
LL C(int n,int m){return w[n]*b[m]%mod*b[n-m]%mod;}
int main()
{
n=read();
prepare();
f[]=;
for(int i=;i<=n;i++){
f[i]=w[i]*T%mod;
if(i>&&i%) f[i]=(f[i]+w[i-]*T)%mod;
}
ans[]=;
for(int i=;i<=n;i++){
for(int j=;j<=i;j++){
ans[i]=(ans[i]+f[j]*ans[i-j]%mod*C(i-,j-)%mod)%mod;
}
}
printf("%lld\n",ans[n]);
return ;
}

汕头市队赛 SRM10 T3 数学上来先打表的更多相关文章

  1. 汕头市队赛SRM14 T3覆盖

    我们可以考虑两种情况 区间之间不相重叠 和 重叠 f[i][j]表示以当前最后一个区间以 i 结尾 并且选了 j 个区间 不相重叠的话 只要选 1-i-w 的max再加上 包含i在内的前四个数的和 相 ...

  2. 汕头市队赛 SRM13 T3

    这道题可以贪心 维护一个答案队列 枚举位置 每次将比当前位置大的队尾全部替代掉 记录删了多少了就好了 #include<cstdio> #include<iostream> # ...

  3. 汕头市队赛 SRM10 T1 贪心只能过样例

    贪心只能过样例 SRM 10 描述 给出n个数a[i](1<=a[i]<=n),问最多能把这些数分成几组,使得每个数a[i]所在的组至少有a[i]个数 输入格式 第一行一个整数n,接下来n ...

  4. 汕头市队赛 SRM10 T1模拟只会猜题意

    模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目.  1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ...

  5. 汕头市队赛 SRM10 dp只会看规律 && bzoj1766

    dp只会看规律 SRM 10 描述 平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖) 输入格式 第一行两个整数n,S接下来n行每行两个整数xi,yi ...

  6. 汕头市队赛 C KMP codeforces B. Image Preview

    汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...

  7. 汕头市队赛 C SRM 05 - YYL 杯 R1 T3!

    C SRM 05 - YYL 杯 R1 背景 tjmak 描述 给一个大小为n的序列V.序列里的元素有正有负.问至少要删除多少个元素使得序列里不存在区间(要求非空)和 >= S.如果答案大于m, ...

  8. 汕头市队赛SRM 20 T3 灵魂觉醒

    背景 自从芽衣.布洛妮娅相继灵魂觉醒之后,琪亚娜坐不住了.自己可是第一个入驻休伯利安号的啊!于是她打算去找德丽莎帮忙,为她安排了灵魂觉醒的相关课程. 第一天,第一节课. “实现灵魂觉醒之前,你需要先将 ...

  9. 汕头市队赛SRM15

    T1——czl SRM 15 众所周知,czl家养了一只可♂爱的***(已屏蔽),那只东西很贪吃,所以czl家很多零食仓库,然而这些仓库里有很多老鼠. 为了心爱的***,czl决定点燃纯艾条,用烟熏老 ...

随机推荐

  1. manjaro安装teamviewer实现远程连接

    不要安装库里面的这两个版本,安装后桌面快捷方式和命令行运行都正常显示窗口,但没有teamviewer ID和随机密码 12.x版本也不用下载尝试了 ➜ ~ teamviewer Init...Chec ...

  2. sap对字符串的操作

    REPLACE  替换字段内容 TRANSLATE 转换大/小写 FIND FIRST OCCURRENCE OF 查找字符串 替换字段内容 REPLACE [FIRST /ALL OCCURRENC ...

  3. python基础之数据类型与变量patr2

    一.元素分类 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中. 即: ...

  4. 初见spark-04(高级算子)

    今天,这个是spark的高级算子的讲解的最后一个章节,今天我们来介绍几个简单的算子, countByKey val rdd1 = sc.parallelize(List(("a", ...

  5. P3819 松江1843路(洛谷月赛)

    P3819 松江1843路 题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一 ...

  6. android stadio svn 使用技巧

    有时候有这样的需求: 就是我一次要改很多的需求,然后代码要分开提交,那么怎么办? 提交的时候一个一个的点开看? 比如:这次改的还没有提上去,又来了一个需求,怎么区分呢 新建一个active的变化列表 ...

  7. AD RMS总结

    AD RMS 认识篇 AD RMS(Active Directory Right Mangement Servic)活动目录权限服务. 首先我通过了解AD RMS的用途去深入学习AD RMS.在过去用 ...

  8. 《Cracking the Coding Interview》——第5章:位操作——题目4

    2014-03-19 06:15 题目:解释(n & (n - 1)) == 0是什么意思? 解法:n&n-1是去掉最低位‘1’的方法.根据运算符优先级,貌似用不着加那个括号,但位运算 ...

  9. ffifdyop

    题目地址:http://www.shiyanbar.com/ctf/2036 后台登陆 上来看到这个界面,果断先看一波源代码. 看到是拼接字符串进行sql查询,就想到了注入了. 但是很不幸的是md5( ...

  10. Linux(Ubuntu 命令大全)

    Ubuntu 一. Ubuntu简介 Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词,意思是“人性”.“我 ...