题面

假设我们将数组 \(b\) 中的元素分割成任意多个 \(k\) 的非空多集 \(S_1, S_2, \ldots, S_k\) ,其中 \(k\) 是一个任意的正整数。定义 \(b\) 的分值为任意整数 \(k\) 的 \(\operatorname{MEX}(S_1)\) \(^{\text{∗}}\) $ + \operatorname{MEX}(S_2) + \ldots + \operatorname{MEX}(S _ k)$ 在 \(b\) 的所有可能分区中的最大值。

给 Envy 一个大小为 \(n\) 的数组 \(a\) 。由于他知道计算 \(a\) 的得分对你来说太容易了,所以他要求你计算 \(a\).\(^{\text{†}}\) 的所有 \(2^n - 1\)$$ 非空子序列的得分之和。由于这个答案可能很大,请输出它对 \(998,244,353\) 取模的结果。

整数集合 \(c_1, c_2, \ldots, c_k\) 中的 \(^{\text{∗}}\) \(\operatorname{MEX}\) 定义为在集合 \(c\) 中不出现的最小非负整数 \(x\) 。例如, \(\operatorname{MEX}([0,1,2,2]) = 3\) 和 \(\operatorname{MEX}([1,2,2]) = 0\) 。

\(^{\text{†}}\) 如果 \(x\) 可以通过删除几个(可能是零个或全部)元素从 \(y\) 得到,那么序列 \(x\) 就是序列 \(y\) 的子序列。

题解

记 \(cnt_i\) 表示数字 \(i\) 在可重集合中出现的次数,对于单个集合,我们很容易知道一个最完美的划分可以达到的分数是 \(cnt_0 + \min(cnt_0+cnt_1) + \ldots + \min(cnt_0+cnt_1+\ldots+cnt_{n-1})\),贪心的考虑把相同的数字分到不同的集合,必定可以构成 \(0\) 到 \(t\) 的一个排列,此时的 \(\operatorname{MEX}\) 和可以达到最大,接下来我们考虑如何求出所有子集的价值和。

不妨设有这样一个集合,这个集合的价值可以通过构造一个 \(0, 1, ..., t\) 排列得到,排列存在当且仅当:

\[\min(cnt_0, cnt_1, \ldots, cnt_{t}) > 0
\]

因此我们考虑分成的子集排列分别能得到的价值,可以发现,这个排列中的每一个元素恰好贡献 \(1\),求每个排列中元素的价值总和转换成求每个元素对所有排列的总贡献。

假定最开始所有的集合并为空集,我们逐个插入元素,使得所有集合的并恰好不重复的是 \(S\) 的一个子集。

记 \(f(t) = \sum\limits_{i = k}^{cnt_t}\binom{cnt_t}{i}\),容易发现 \(f(t)\) 相当于把 \(t\) 元素插入 \(i\) 个不同的集合中,相当于把这些元素先插入 \(k\) 个 \(0 \sim t - 1\) 的排列中,这部分元素有 \(1\) 的贡献,剩余的 \(i - k\) 个元素也插入集合中,但是此部分元素没有直接贡献,仅仅可以让集合并变成一个新的子集 ,剩余的 \(r\) 个元素也可以组成 \(2^r\) 个集合,这些集合插入进去也不会影响现有的答案的贡献,因为我们仅仅计算的是元素 \(t\) 产生的贡献,他们可以任意插入已有的排列中,并且不改变 \(t\) 存在的价值。

我们不妨枚举 \(k\),对于每个 \(k\),我们考虑尽可能长的构建 \(k\) 个 \(0 \sim t\) 排列,容易知道最大的 \(t\) 满足 \(\min(cnt_0, cnt_1, \ldots, cnt_{t}) \ge k\),同样,对于每个 \(t\) 我们也需要去计算他的答案。

对 \(0\) 元素来说,拿出 \(k\) 个元素作为合法集合,共有 \(\binom{cnt_0}{k}\) 种不同集合并形式,再考虑将多余的 \(0\) 任意插入进去,这部分的贡献是 \(f(0)\),对于除了 \(0\) 以外的剩余 \(r\) 个元素,可以任意放入集合并且不影响答案,根据乘法原理,贡献是所有操作的种类数的积,此部分的 \(0\) 的答案与并出来的子集数量一致,直接加到答案上即可。

到 \(t\) 元素时,同样,对于前 \(t - 1\) 的元素已经考虑插入完成,有 \(\prod\limits_{i = 0}^{t - 1}f(i)\) 种子集,此时插入方式有 \(f(t)\) 种,对于其后的元素同样考虑是否加入,也有 \(2^r\) 种方式,至此,我们的答案就可以通过上述方案递推求出。

发现 \(\sum\limits_{i = 0}^{n - 1}cnt_{i} = n\),因此时间复杂度为 \(O(n)\),不会超时。

参考代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10, mod = 998244353;
int n, a[N], suf[N], pow2[N], frac[N], inv[N]; ll ksm(ll a, ll k)
{
ll res = 1;
while (k)
{
if (k & 1) res = res * a % mod;
k >>= 1;
a = a * a % mod;
}
return res;
} void init()
{
pow2[0] = frac[0] = 1;
for (ll i = 1; i < N; i ++ ) pow2[i] = 2ll * pow2[i - 1] % mod, frac[i] = frac[i - 1] * i % mod;
inv[N - 1] = ksm(frac[N - 1], mod - 2);
for (ll i = N - 1; i; i -- ) inv[i - 1] = inv[i] * i % mod;
} int binom(int a, int b)
{
return 1ll * inv[b] * inv[a - b] % mod * frac[a] % mod;
} void solve()
{
cin >> n;
vector<int> cnt(n);
for (int i = 1; i <= n; i ++ ) cin >> a[i], cnt[a[i]] ++ ;
suf[n - 1] = 1;
for (int i = n - 1; i; i -- ) suf[i - 1] = 1ll * suf[i] * pow2[cnt[i]] % mod;
ll ans = 0, p = 0;
vector<int> f(n), g(n);
g = cnt;
for (int k = n; k; k -- )
{
while (p < n && cnt[p] >= k) p ++ ;
ll res = 1;
for (int i = 0; i < p; i ++ )
{
while (g[i] >= k) (f[i] += binom(cnt[i], g[i])) %= mod, g[i] -- ;
res = res * f[i] % mod;
(ans += res * suf[i] % mod) %= mod;
}
}
cout << ans << endl;
} int main()
{
init();
int T;
cin >> T;
while (T -- ) solve();
return 0;
}

CF2030E MEXimize the Score 题解的更多相关文章

  1. C++版 - UVa1585 Score - 题解

    C++版 - UVa1585 Score - 题解 <算法竞赛入门经典(第二版)> 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 问题描述: 给出一个由O和X ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. ZOJ 3819 Average Score(平均分)

    Description 题目描述 Bob is a freshman in Marjar University. He is clever and diligent. However, he is n ...

  4. 洛谷P2722 总分 Score Inflation

    P2722 总分 Score Inflation 184通过 295提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 关于算法 题目背景 学生在我们USACO的 ...

  5. UVA 12906 Maximum Score 排列组合

    Maximum Score Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vie ...

  6. hdu 5268 ZYB loves Score 水题

    ZYB loves Score Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  7. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  8. 【2013南京区域赛】部分题解 hdu4802—4812

    上周末打了一场训练赛,题目是13年南京区域赛的 这场题目有好几个本来应该是我擅长的,但是可能是太久没做比赛了各种小错误代码写的也丑各种warusn trush搞得人很不爽 全场题之一的1002也没有想 ...

  9. HDU1789(Doing Homework again)题解

    HDU1789(Doing Homework again)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定任务分数和其截止日期,每日可完成一任务,输出当罚分尽可能小时 ...

  10. Score(规律)

    Score Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

随机推荐

  1. 【Mac渗透测试】之SQL注入Demo

    目录: 一.下载安装sqlmap 二.SQL注入 三.参考文章 一.下载安装sqlmap 1.官网地址:http://sqlmap.org/#download git下载: git clone --d ...

  2. 手把手在STM32F103C8T6上构建可扩展可移植的DHT11驱动

    前言 如何驱动一个你陌生的传感器呢?别看我,也别在网上死马当活马医!你需要做的,首先是明确你的传感器的名称,在这里,我们想要使用的是DHT11温湿度传感器 可能需要的前置知识 简单的OLED驱动原理 ...

  3. ​Spring:IOC(2)

    接前文:Spring:IOC 目录 依赖注入之setter注入 依赖注入之构造器注入 特殊值处理 字面量赋值 null值 xml实体 CDATA节 为类类型属性赋值 为数组类型属性赋值 修改Stude ...

  4. express项目的创建

    前言 前端开发者若要进行后端开发,大多都会选择node.js,在node生态下是有大量框架的,其中最受新手喜爱的便是老牌的express.js,接下来我们就从零创建一个express项目. 安装nod ...

  5. A星搜索算法的更多细节

    A*搜索算法的更多内容 A*算法,也许你会习惯称它为「A*寻路算法」.许多人大概是因寻路--尤其是「网格地图」寻路认识它的,网上很多教程也是以网格地图为例讲解它的算法实现.这导致了许多人在遇到同样用了 ...

  6. 从数据洞察到智能决策:合合信息&infiniflow RAG技术的实战案例分享

    从数据洞察到智能决策:合合信息&infiniflow RAG技术的实战案例分享 标题取自 LLamaIndex,这个内容最早提出于今年 2 月份 LlamaIndex 官方博客.从 22 年 ...

  7. Pointer Event Api-整合鼠标事件、触摸和触控笔事件

    Pointer Events API 是Hmtl5的事件规范之一,它主要目的是用来将鼠标(Mouse).触摸(touch)和触控笔(pen)三种事件整合为统一的API. Pointer Event P ...

  8. 《Vue.js 设计与实现》读书笔记 - 第8章、挂载与更新

    第8章.挂载与更新 8.1 挂载子节点和元素的属性 扩展子元素的类型可以为数组,并判断如果是数组的话,就先依次挂载所有的子元素. 同时新增节点属性.属性可以通过 el.setAttribute 添加到 ...

  9. 2024年8月中国数据库排行榜:OceanBase攀升再夺冠,达梦跃入三甲关

    在这个炽热的季节,随着巴黎奥运会的盛大开幕,全球将目光聚集在了体育的无限魅力和竞技的巅峰对决上.如同奥运赛场上的激烈角逐,中国数据库界也上演着一场技术与创新的较量,各个数据库产品正在中国乃至全球舞台上 ...

  10. 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年3月刊

    本文为大家整理了墨天轮数据社区2023年3月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的基础安装配置操作.故障处理.性能优化等日常实践操作,以及概念梳理.常用脚 ...