首页 > 其他分享 >[ARC170C] Prefix Mex Sequence

[ARC170C] Prefix Mex Sequence

时间:2024-01-26 22:33:41浏览次数:21  
标签:ARC170C le int i64 Prefix maxn ans Mex mod

给定 \(n, m, S_1\sim S_n\),当 \(S_i = 0\) 时 \(A_i \neq \mathrm{mex}(A_1\sim A_{i - 1})\),反之 \(A_i = \mathrm{mex}(A_1\sim A_{i - 1})\),求值域为 \([0, m]\) 的 \(A\) 的数量 \(\bmod\ 998244353\)。

\(1\le n \le 5000, 0\le m\le 10^9\)。

看到题目就会想到 MEX Counting 的刻画方法:延后确立元素。但是这样做非常繁杂,并且 \(\mathcal O(n^3)\) 不存在什么好的优化方法。

尝试优化的过程中我们会产生一种感觉:在状态里记 MEX 似乎完全没用。

看一看这能带来什么启发。对于 \(m\ge n - 1\) 的情况,显然 MEX 就是没有用,但是受制于上面的思路,并没有什么好的进展。

一个 tricky 的点是,关注序列的构造过程。

对于 \(m\ge n -1\),我们发现 \(A_i\) 仅和 \(A_1\sim A_{i - 1}\) 有关,并且不管 \(S_i\) 为 \(0\) 还是 \(1\),它们的贡献都可以直接得出。

对于 \(m < n - 1\),提示已经相当明显,我们只需要记录 \([0, m]\) 中还剩多少数没有填就能继续维持上述的贡献计算方式。

更进一步地,可以发现这样做在这个题可行的原因是,一个元素的 地位,包括其贡献和取值限制,在不同的状态中完全一致,于是不需要关注状态,而只需要关注这个元素本身。

#include <bits/stdc++.h>
#define pb emplace_back
#define fir first
#define sec second

using i64 = long long;
using pii = std::pair<int, int>;

constexpr int maxn = 5e3 + 5;
constexpr int mod = 998244353;

int n, m, a[maxn], f[maxn][maxn];

int power(int x, int y) {
	int ans = 1;
	for (; y; y >>= 1) {
		if (y & 1) ans = (i64)ans * x % mod;
		x = (i64)x * x % mod;
	}
	return ans;
}

void add(int& x, int y) { if ((x += y) >= mod) x -= mod; return ; }

int main() {
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; ++i)
		scanf("%d", &a[i]);
	if (m >= n - 1) {
		int ans = 0;
		for (int i = 1; i <= n; ++i)
			ans += !a[i];
		printf("%d\n", power(m, ans));
		return 0;
	}
	f[0][m + 1] = 1;
	for (int i = 1; i <= n; ++i) {
		if (a[i] == 1) {
			for (int j = 0; j <= m; ++j)
				f[i][j] = f[i - 1][j + 1];
		} else {
			for (int j = 0; j <= m + 1; ++j) {
				if (j >= 1) add(f[i][j], (i64)f[i - 1][j + 1] * j % mod);
				add(f[i][j], (i64)f[i - 1][j] * (m + 1 - j) % mod);
			}
		}
	}
	int ans = 0;
	for (int i = 0; i <= m + 1; ++i)
		add(ans, f[n][i]);
	printf("%d\n", ans);
	return 0;
}

标签:ARC170C,le,int,i64,Prefix,maxn,ans,Mex,mod
From: https://www.cnblogs.com/663B/p/17990870

相关文章

  • 从CF1819A学习mex相关问题及assert调试宏
    Problem-1819A-Codeforces快速计算mexintcalcMex(vector<int>v){ sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()) intn=int(v.size());for(inti=0;i<n;++i)if(v[i]!=i)returni;returnn;}<cass......
  • ARC170C Prefix Mex Sequence
    题意简述有长度为\(n\)的\(s_i=0/1\),求满足下列条件的长度为\(n\)的序列\(a\)的个数,对\(998244353\)取模:\(\foralli,0\lea_i\lem\)当\(s_i=0\)时,\(a_i\not=\operatorname{mex}(a_1,a_2,\cdots,a_{i-1})\)当\(s_i=1\)时,\(a_i=\operatorname{mex}(a_1,a_2,\......
  • Petrozavodsk Summer 2019. Day 9. MEX Foundation Contest【杂题】
    比赛链接A.TheOnePolynomialMan给定模数\(p\)和\(0\simp-1\)的两个集合\(U,V\),求有多少个有序对\((a,b)\)满足:\(f(a,b)=\prod\limits_{z\inV}\left(\frac{(2a+3b)^2+5a^2}{(3a+b)^2}+\frac{(2a+5b)^2+3b^2}{(3a+2b)^2}-z\right)\equiv0\pmo......
  • wasmex webassenbly elixir 运行时
    wasmex是基于wasmtime以及rustnif开发的方便elixir运行webassembly的框架与rust的集成与rust集成使用的三方包 与mjml工具类似使用了rustler_precompiled以及rustlerrust使用的三方包 前边也说了是基于了wasmtime包装的,同时使用了wasmtimewasi一些子模块说明rustle......
  • CF1527D MEX Tree 题解
    思路如果一条路径的\(\text{mex}=k\),那么\(0\simk-1\)这些点一定在路径中出现过,并且一定在一条链上。如果不在一条链上,那么就不满足简单路径这一条件了。因此我们在从小到大加点的过程中如果发现一个点不在已求出的链上,那么比这个点编号大的\(k\)答案一定都是\(0\)了......
  • DOMException - play() 请求中断
    DOMException- play()请求中断bookmark_border  FrançoisBeaufortGitHub 您刚才在Chrome开发者工具JavaScript控制台中发现了这个意外的媒体错误吗?注意 :未捕获(承诺中)DOMException:play()请求因调用pause()而中断。或注意:未捕获(在承诺中)DOMExceptio......
  • CF817F MEX Queries
    题意一个集合,初始为空。请你维护以下\(3\)种操作。把\([l,r]\)中在集合中没有出现过的数添加到集合中。把\([l,r]\)中在集合中出现过的数从集合中删掉。把\([l,r]\)中在集合中没有出现过的数添加到集合中,并把\([l,r]\)中在集合中出现过的数从集合中删掉。每......
  • ACL/IP-PREFIX +ROUTE-POLICY
    1、实验拓扑图2、实验目的测试“全允许则允许,有拒绝则拒绝”3、实验步骤3.1访问控制列表aclnumber2000rule5permitsource3.3.3.30.0.0.03.2配置路由策略route-policyp1permitnode10if-matchacl20003.3调用路由策略ospf100//进入进程模式import-routeisis200ty......
  • @ConfigurationProperties(prefix = “xx.xx.xx“) 从配置文件中取值赋给类的属性
    @ConfigurationProperties(prefix=“xx.xx.xx“)从配置文件中取值赋给类的属性@ConfigurationProperties(prefix=“xx.xx.xx”)该注解的作用是从配置文件中取值赋给类的属性,当然也可以为方法的变量赋值/***服务访问URL*/@Component@ConfigurationProperties(value......
  • org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis
    Requestprocessingfailed;nestedexceptionisorg.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.binding.BindingException:Parameter'keyWord'notfound.Availableparametersare[keyword,param1] 错误原因:我在mapper里加......