[ARC187B] Sum of CC 题解

\(i\)\(j\) 有边,也就是 \(a_i<a_j\),那么对于一个 \(i < k < j\),会发现 \(a_k>a_i\)\(a_k<a_j\) 至少满足一个。也就是说 \(k\) 也一定和 \(i,j\) 联通。于是我们发现了一个关键性质:所有联通块都为一个区间。

那我们考虑 \(i\)\(i+1\) 什么时候不联通:\(i\) 之前的任意一个数都大于 \(i\) 之后的任意一个数。也就是前缀 \(\min\) 大于后缀 \(\max\) 的时候。

那就可以先用 dp 预处理出前 \(i\) 个数的前缀 \(\min\)\(j\) 的方案数,后缀同理。因为联通块数其实就是有多少个 \(i\)\(i+1\) 不联通,所以直接枚举 \(i\) 然后用 dp 值统计答案即可。需要前缀和优化。

//dzzfjldyqqwsxdhrdhcyxll
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 2e3 + 10;
const int mod = 998244353;
int n,m,a[MAXN],f[MAXN][MAXN],sum[MAXN][MAXN],ans,g[MAXN][MAXN];
signed main() {
	cin >> n >> m;
	for(int i = 1;i <= n;i++) cin >> a[i];
	f[0][m] = 1,sum[0][0] = f[0][0];
	for(int i = 1;i <= m;i++) 
		sum[0][i] = (sum[0][i - 1] + f[0][i]) % mod;
	for(int i = 1;i <= n;i++) {
		for(int j = 1;j <= (a[i] == -1 ? m : a[i]);j++) {
			f[i][j] = f[i - 1][j] * (a[i] == -1 ? (m - j + 1) : 1) % mod;
			if(j == a[i] || a[i] == -1) f[i][j] = (f[i][j] + sum[i - 1][m] - sum[i - 1][j] + mod) % mod;
		}
		for(int j = 1;j <= m;j++) sum[i][j] = (sum[i][j - 1] + f[i][j]) % mod;
	}
	memset(sum,0,sizeof sum);
	g[n + 1][0] = 1,sum[n + 1][0] = g[n + 1][0];
	for(int i = 1;i <= m;i++) 
		sum[n + 1][i] = (sum[n + 1][i - 1] + g[n + 1][i]) % mod;
	for(int i = n;i >= 1;i--) {
		for(int j = (a[i] == -1 ? 1 : a[i]);j <= m;j++) {
			g[i][j] = g[i + 1][j] * (a[i] == -1 ? j : 1) % mod;
			if(j == a[i] || a[i] == -1) g[i][j] = (g[i][j] + sum[i + 1][j - 1]) % mod;
		}
		for(int j = 1;j <= m;j++) sum[i][j] = (sum[i][j - 1] + g[i][j]) % mod;
	}
	for(int i = 1;i <= n;i++) 
		for(int j = 1;j <= m;j++) 
			ans = (ans + f[i][j] * sum[i + 1][j - 1]) % mod;
	cout << ans;
	return 0;
}
posted @ 2024-11-18 10:39  Creeper_l  阅读(26)  评论(0编辑  收藏  举报
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
  3. 3 True love tired
  4. 4 一笑江湖 (DJ弹鼓版) 闻人听書_
  5. 5 最好的安排 曲婉婷
  6. 6 星星在唱歌 司南
  7. 7 山川 李荣浩
  8. 8 On My Way Alan Walker
  9. 9 百战成诗 王者荣耀·100英雄官方群像献礼歌
  10. 10 雪 Distance Capper / 罗言
  11. 11 Edamame bbno$ / Rich Brian
  12. 12 半生雪 七叔-叶泽浩
  13. 13 Catch My Breath Kelly Clarkson
  14. 14 Love Is Gone SLANDER / Dylan Matthew
  15. 15 Endless Summer Alan Walker / Zak Abel
  16. 16 悬溺 葛东琪
  17. 17 风吹丹顶鹤 葛东琪
  18. 18 Normal No More TYSM
  19. 19 哪里都是你 队长
  20. 20 Stronger Kelly Clarkson
  21. 21 廖俊涛
  22. 22 消愁 毛不易
  23. 23 The Runner Yubik
  24. 24 踏山河 七叔-叶泽浩
  25. 25 Waiting For Love Avicii
  26. 26 在你的身边 盛哲
  27. 27 Dream It Possible Delacey
  28. 28 凄美地 郭顶
  29. 29 满天星辰不及你 ycc
  30. 30 侧脸 于果
  31. 31 阿拉斯加海湾 蓝心羽
  32. 32 虞兮叹 闻人听書_
  33. 33 离别开出花 就是南方凯
  34. 34 盗墓笔记·十年人间 李常超 (Lao乾妈)
イエスタデイ(翻自 Official髭男dism) - 茶泡饭,春茶,kobasolo
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.