牛客网多校训练第一场 B - Symmetric Matrix(dp)
链接:
https://www.nowcoder.com/acm/contest/139/B
题意:
求满足以下条件的n*n矩阵A的数量模m:
A(i,j) ∈ {0,1,2}, 1≤i,j≤n.
A(i,j) = A(j,i), 1≤i,j≤n.
A(i,1) + A(i,2) + ... + A(i,n) = 2, 1≤i≤n.
A(1,1) = A(2,2) = ... = A(n,n) = 0.
其中1≤n≤1e5, 1≤m≤1e9。
分析:
把矩阵看成无向图的邻接矩阵,即要求所有点度为2,即每个点都属于一个环。
设d(n)表示n个点满足条件的图的数量。
思考每加入一个新点,如何从已知状态转移。
1.从前面的n-1个点中选出1个点与新点构成环,有(n-1)d(n-2)种方案。
2.从前面的n-1个点中选出k个点,剩下的点与新点连成环,
有sum(C(n-1,k)*(n-1-k)!/2)(2≤k≤n-3)种方案,
因为剩下的点与新点连成环时的对称性,所以要除以2。
将以上两式化简相加,得d(n) = (n-1)d(n-2) + sum((n-1)!d(k)/k!/2)(2≤k≤n-3)。
设f(n) = sum((n-1)!d(k)/k!/2)(2≤k≤n-3)。
可以发现,f(n)也是可以递推的,即f(n) = (n-1)f(n-1) + (n-1)(n-2)d(n-3)/2。
所以,线性时间递推f和d数组即可。
代码:
import java.io.*;
import java.util.*; public class Main {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
final int UP = (int)1e5 + 5;
long d[] = new long[UP], f[] = new long[UP]; void MAIN() {
while(cin.hasNext()) {
int n = cin.nextInt();
long m = cin.nextInt(); d[2] = d[3] = f[3] = 1 % m;
for(int i = 4; i <= n; i++) {
f[i] = ((i-1) * f[i-1] % m + (long)(i-1) * (i-2) / 2 % m * d[i-3] % m) % m;
d[i] = ((i-1) * d[i-2] % m + f[i]) % m;
}
System.out.println(d[n]);
}
} public static void main(String args[]) { new Main().MAIN(); }
}
牛客网多校训练第一场 B - Symmetric Matrix(dp)的更多相关文章
- 牛客网多校训练第一场 A - Monotonic Matrix(Lindström–Gessel–Viennot lemma)
链接: https://www.nowcoder.com/acm/contest/139/A 题意: 求满足以下条件的n*m矩阵A的数量模(1e9+7):A(i,j) ∈ {0,1,2}, 1≤i≤n ...
- 牛客网多校训练第一场 I - Substring(后缀数组 + 重复处理)
链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1 ...
- 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)
链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...
- 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)
链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018ni ...
- 牛客网多校训练第一场 E - Removal(线性DP + 重复处理)
链接: https://www.nowcoder.com/acm/contest/139/E 题意: 给出一个n(1≤n≤1e5)个整数(范围是1至10)的序列,求从中移除m(1≤m≤min(n-1, ...
- 牛客网多校训练第一场 D - Two Graphs
链接: https://www.nowcoder.com/acm/contest/139/D 题意: 两个无向简单图都有n(1≤n≤8)个顶点,图G1有m1条边,图G2有m2条边,问G2有多少个子图与 ...
- 牛客网多校训练第二场D Kth Minimum Clique
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...
- 牛客网多校训练第九场H Cutting Bamboos
题目链接:https://ac.nowcoder.com/acm/contest/889/H 题意:给出n颗竹子的高度,q次询问,每次询问给出l,r,x,y,每次选取[l,r]中的竹子,砍y次砍掉所有 ...
- 牛客网多校第3场C-shuffle card 平衡树或stl(rope)
链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...
随机推荐
- [shell基础]——变量
变量的赋值 #定义变量,注意等号两边没有任何空格 variable=#定义环境变量export variable= #双引号:可含空格.可转义特殊字符 variable=" " # ...
- 架构实战项目心得(四)(补):Maven settings.xml的所有标签详解
文章内容较长,各位看客可以根据自己需要CTRL+F 直接定位到自己需要了解的地方哦~ <?xmlversion="1.0" encoding="UTF-8" ...
- 改造一个JS插件的过程记录
最近做一个合作项目,对方要求我们做一个web应用程序,然后嵌入到他们的总的wen应用中,风格要求保持一致,于是乎就发了一个html文件过来,大概列举了一下各种控件,对话框的效果. 好了,重点说其中的一 ...
- Chetsheet: 2017 01.01 ~ 01.31
Web TypeScript: the missing introduction Async HTTP API and service bus Optimizing the Performance o ...
- css之子元素获取(未定义高度)父元素的高度
你可能碰到过这样的需求,一个高度不固定的区域(内容由用户创造),当鼠标经过该区域或者其神马操作时,需要出现一个与该区域一样大的模版: 我们用一个span来处理这个mask.由于 .sample-1 和 ...
- PAT 1071. Speech Patterns
又是考输入输出 #include <cstdio> #include <cstdlib> #include <string> #include <vector ...
- jquery弹窗居中-类似alert()
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?
最近阿里正式开源的BizCharts图表库基于React技术栈,各个图表项皆采用了组件的形式,贴近React的使用特点.同时BizCharts基于G2进行封装,Bizcharts也继承了G2相关特性. ...
- curl POST JSON
1. 场景 Controller接收json格式数据 封装bean @RequestMapping(value = "/bb", method = RequestMethod.PO ...
- element中文件上传
vue+element 文件操作 作者:一粒尘土 时间:2019-3-17 注:以下操作针对 vue-cli 目录 使用 组件常用参数 组件常用方法 上传文件 上传文件格式限制 回显文件 下载文件 删 ...