NOIP 模拟赛 长寿花 题解
NOIP 模拟赛 长寿花 题解
要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件:
- 同一层两个相邻物品颜色不能相同。
- 相邻两层颜色集合不能相同。
求方案数 \(\pmod p\)
\(n,m\le 10^6,a_i\le 5000,\sum_{i=1}^n a_i\le 10^7,p\le 10^9\)
sol
由于总颜色数不变,可以先不管选了哪些颜色,最后乘上一个组合即可。
设 \(g_{i,j}\) 为对于某一行,前 \(i\) 个位置用了 \(j\) 个颜色方案数。
由于后面需要求组合数,稍加修改这个递推式可以简化实现:
那么原来的 \(g_{i,j}\) 等于现在的 \(g_{i,j}\times j!\)
设 \(f_{i,j}\) 为前 \(i\) 层,第 \(i\) 行放了 \(j\) 种颜色的方案数。
由于有组合数, \(P\) 也不一定是质数,分解质因数麻烦,这就体现修改后的用处了。
\(j!\times\binom{m}{j}=\dfrac{m!}{(m-j)!}\) ,是可以预处理的。
最后, \(f\) 滚掉一维,那个 \(\sum\) 用前缀和。最终复杂度 \(O(\sum a_i)\)
code
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long uLL;
typedef long double LD;
typedef double db;
const int N = 1e6 + 5;
int n, m, a[N], mx, op, vis[N], P;
int f[2][5005], g[5005][5005], fac[N], o[N];
int main() {scanf("%d%d%d", &n, &m, &P);fac[0] = 1, o[0] = 1;for (int i = 1; i <= m; i++) fac[i] = 1ll * fac[i - 1] * i % P, o[i] = 1ll * o[i - 1] * (m - i + 1) % P;for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);mx = max(mx, a[i]);}g[0][0] = 1;for (int i = 1; i <= mx; i++)for (int j = 1; j <= mx && j <= m; j++)g[i][j] = (1ll * g[i - 1][j - 1] % P + 1ll * g[i - 1][j] * (j - 1) % P) % P;f[0][0] = 1;for (int i = 1, j; i <= n; i++) {op ^= 1;memset(f[op], 0, sizeof(f[op]));for (j = 1; j <= a[i] && j <= m; j++) {f[op][j] = 1ll * g[a[i]][j] * f[op ^ 1][0] % P * o[j] % P;if (a[i - 1] >= j) f[op][j] = 1ll * (f[op][j] - 1ll * f[op ^ 1][j] * g[a[i]][j] % P * fac[j] % P) % P;f[op][0] = 1ll * (f[op][0] + f[op][j]) % P;}}printf("%d", 1ll * (f[op][0] + P) % P);
}
NOIP 模拟赛 长寿花 题解相关推荐
- jyzy noip模拟赛5.22-2
不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- NOIP模拟赛 17.10.10
初次见面(firstmeet) [题目背景] 雾之湖边,静得可怕. 露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之 湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她 ...
- 第十四届蓝桥杯第一期模拟赛试题与题解 C++
第十四届蓝桥杯第一期模拟赛试题与题解 C++ 试题 A 题解:位运算 试题 B 题解:日历模拟 试题 C 题解:double 求和 试题 D 题解:枚举 试题 E 题解:二维前缀和 试题 F 题解:两 ...
- NOIP模拟赛csy2021/10/30
NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...
- 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告
[WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...
- 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)
[题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...
最新文章
- 当Docker遇到Intellij IDEA,再次解放了生产力~
- 面试题小记:1、统计字符串出现的次数,2、约瑟夫环问题
- listview 滑动以后设置最上面一行为整行展示
- 隐藏UITableView当没有数据或数据不够的时候出现的分割线.
- CDZSC_2015寒假新人(1)——基础 i
- 工作136:eachrt
- Hadoop源代码分析(MapReduce概论)
- 管理博文Hive大数据-Mysql的安装和启动---大数据之Hive工作笔记0007
- 做游戏,学编程(C语言) 4 flappy bird
- (转)IDE 而言,是 Xcode 的技术比较先进还是 Visual Studio?
- SharePoint 2010版本表
- 李宏毅机器学习——无监督学习(五)
- 回溯法和树的先序遍历
- matlab拟合出余弦曲线,如何用matlab做正弦曲线拟合?
- linux nginx rtmp 直播,linux下利用nginx搭建rtmp直播服务
- 使用arecord、aplay命令实现音频的采集和播放
- 论文笔记(十八):Object Detection and Spatial Location Method for ... Based on 3D Virtual Geographical Scen
- 暴漏React配置时报错Remove untracked files, stash or commit any changes, and try again.
- CodeFun-UI 设计稿智能生成前端源代码
- 【Qt】断言Q_ASSERT的使用
热门文章
- const关键字的用法
- 指示函数 indicator
- 解决typescrip使用xml2js库报错:Module not found: Error: Can‘t resolve ‘timer‘ in ‘‘
- javax.websocket 使用指南
- Postman模拟后端接口,响应request返回response
- 推荐最好的四款Linux/BSD防火墙
- 【html】点击图片内链接进行跳转
- 双稳态继电器工作原理图_三分钟看懂双稳态电磁阀的工作原理
- git 怎么切换分支命令_git 项目切换分支 命令
- jvm内存分区和TLAB