汕头市队赛 SRM10 T3 数学上来先打表
数学上来先打表 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 数学上来先打表的更多相关文章
- 汕头市队赛SRM14 T3覆盖
我们可以考虑两种情况 区间之间不相重叠 和 重叠 f[i][j]表示以当前最后一个区间以 i 结尾 并且选了 j 个区间 不相重叠的话 只要选 1-i-w 的max再加上 包含i在内的前四个数的和 相 ...
- 汕头市队赛 SRM13 T3
这道题可以贪心 维护一个答案队列 枚举位置 每次将比当前位置大的队尾全部替代掉 记录删了多少了就好了 #include<cstdio> #include<iostream> # ...
- 汕头市队赛 SRM10 T1 贪心只能过样例
贪心只能过样例 SRM 10 描述 给出n个数a[i](1<=a[i]<=n),问最多能把这些数分成几组,使得每个数a[i]所在的组至少有a[i]个数 输入格式 第一行一个整数n,接下来n ...
- 汕头市队赛 SRM10 T1模拟只会猜题意
模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目. 1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ...
- 汕头市队赛 SRM10 dp只会看规律 && bzoj1766
dp只会看规律 SRM 10 描述 平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖) 输入格式 第一行两个整数n,S接下来n行每行两个整数xi,yi ...
- 汕头市队赛 C KMP codeforces B. Image Preview
汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...
- 汕头市队赛 C SRM 05 - YYL 杯 R1 T3!
C SRM 05 - YYL 杯 R1 背景 tjmak 描述 给一个大小为n的序列V.序列里的元素有正有负.问至少要删除多少个元素使得序列里不存在区间(要求非空)和 >= S.如果答案大于m, ...
- 汕头市队赛SRM 20 T3 灵魂觉醒
背景 自从芽衣.布洛妮娅相继灵魂觉醒之后,琪亚娜坐不住了.自己可是第一个入驻休伯利安号的啊!于是她打算去找德丽莎帮忙,为她安排了灵魂觉醒的相关课程. 第一天,第一节课. “实现灵魂觉醒之前,你需要先将 ...
- 汕头市队赛SRM15
T1——czl SRM 15 众所周知,czl家养了一只可♂爱的***(已屏蔽),那只东西很贪吃,所以czl家很多零食仓库,然而这些仓库里有很多老鼠. 为了心爱的***,czl决定点燃纯艾条,用烟熏老 ...
随机推荐
- thinkPHP5.0 save和saveAll,新增和更新的问题
今天遇到一个问题,在模型中使用save保存数据之后,使用saveAll继续新增数据,结果报 缺少更新条件,网上搜了下发现一篇文章https://www.jianshu.com/p/1848f61de6 ...
- sql语句(Oracle和sqlserver)
查询表的首句:(Oracle) select * from (select a.*, rownum as rn from tab_name a order by col )where rn = 1 o ...
- 十、mysql之索引原理与慢查询优化
mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还 ...
- 7,MongoDB 之 Limit 选取 Skip 跳过 Sort 排序
我们已经学过MongoDB的 find() 查询功能了,在关系型数据库中的选取(limit),排序(sort) MongoDB中同样有,而且使用起来更是简单 首先我们看下添加几条Document进来 ...
- [bzoj3071]N皇后
哈哈哈水题~ 但是不能一眼看出来的..我想了一个小时?! 题面 Description “国际象棋中,一方的皇后数不能超过5个” 一个N*N的棋盘,任意摆放皇后,最坏情况下最少需要多少个皇后才能保证所 ...
- Java密码学综述---密码学基本功能
机密性 只有发送方与指定接收方才能理解报文的内容,监听者只能截取到加密后的报文信息,但不能还原报文的内容,做到了保密 鉴别 发送方与接收方都应该能证实通信过程所涉及的另一方,通信的另一方确实具有它们所 ...
- Android 支付宝H5 没有回调
今天测试反馈问题,说,手机上没有安装支付宝的,调用支付宝支付之后,没有回调.不提示成功也不提示失败. 我自己试了半天也都是没有问题 .后来终于可以试出来了. 发现原来是,清单里面注册的Activity ...
- CF6C Alice, Bob and Chocolate
CF6C Alice, Bob and Chocolate 题目链接 写了一天搜索写的有点累了,就顺手水了一道CF的模拟题 这道题就是简单的模拟整个题的过程,注意最后输出的形式就好了QWQ AC代码如 ...
- chrome 切换到其他网络后重新加载网
chrome 突然提示 “您与 www.google.com 之间的安全连接目前正受到干扰. 请等待几分钟后再尝试重新加载网页,或在切换到其他网络后重新加载网” 查看证书发现 已经过期 解决:同步下 ...
- curl 编译
curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本.支持很多协议:FTP, FTPS, HT ...