【ICPC】The 2021 CCPC Weihai Onsite G

Shinyruo and KFC

#组合数学 #暴力 #枚举

题目描述

During your participation in this competition, Shinyruo is preparing to order KFC for the offline competition next week.

There are n n n kinds of foods in KFC, and he plans to order a i a_i ai number of the i i i-th food for every i ∈ [ 1 , n ] i \in [1,n] i[1,n]. Due to shortage of manpower, the total number of all kinds of foods is no larger than 1 0 5 10^5 105.

After the competition, he will hand all the KFC out to k k k teams. Each team can get different kinds of foods but for each kind it can get one at most.

Now Shinyruo wants to know the number of ways to hand the desserts out. As he doesn’t know the number of participating teams, you need to calculate the answers for k = 1 , 2 , ⋯ , m k=1,2,\cdots,m k=1,2,,m.

As the answer can be large, print it modulo 998244353 998244353 998244353.

输入格式

The first line contains two integers n , m n,m n,m. ( 1 ≤ m , n ≤ 5 ⋅ 1 0 4 1 \le m,n \le 5 \cdot 10^4 1m,n5104)

The second line contains n n n integers a 1 , ⋯ , a n a_1,\cdots,a_n a1,,an. ( 0 ≤ a i ≤ 1 0 5 , ∑ i = 1 n a i ≤ 1 0 5 0\le a_i\le 10^5,\ \sum_{i=1}^n a_i\le 10^5 0ai105, i=1nai105)

输出格式

m m m lines each contains one integer. The i i i-th integer indicates the answer of k = i k=i k=i modulo 998244353 998244353 998244353.

样例 #1

样例输入 #1

4 6
0 1 2 3

样例输出 #1

0
0
9
96
500
1800

解法

解题思路

容易发现,队伍人数 > max ⁡ i = 1 i ≤ n a i > \max_{i=1}^{i\leq n}a_i >maxi=1inai 时,一定无解,因为根据鸽巢定理,每个人必定被分到重复的糖果。

容易发现,答案其实就是 ∑ j = m a x a i + 1 j ≤ n ∑ i = 1 i ≤ n C j a i \sum_{j=max_{a_i+1}}^{j\leq n} \sum_{i=1}^{i\leq n}C_{j}^{a_i} j=maxai+1jni=1inCjai,但是考虑到 i ≤ 5 ∗ 1 0 4 i \leq 5*10^4 i5104,直接枚举会超时。

由于 0 ≤ a i ≤ 1 0 5 , ∑ i = 1 n a i ≤ 1 0 5 0\le a_i\le 10^5,\ \sum_{i=1}^n a_i\le 10^5 0ai105, i=1nai105,所以 a i a_i ai的种类至多有 n \sqrt n n 种,那么我们可以使用一个 m a p map map来存储类型的个数,使用快速幂加快组合数的计算即可。

由于 a i ≤ 1 0 5 a_i \leq 10^5 ai105,我们可以预处理出所有的阶乘,然后使用组合数的公式即可。

最后复杂度为 O ( m n l o g 2 n ) O(m\sqrt n log_2 n) O(mn log2n)

代码

const int N = 1e6 + 10;
namespace CNM {const int N = 3e5 + 5;int quick(int x, int n) {x %= mod;int res = 1;while (n) {if (n & 1) res = (res * x) % mod;x = x * x % mod;n >>= 1;}return res;}int inv(int x) {return quick(x, mod - 2);}int fac[N], invfac[N];void init() {fac[0] = 1;for (int i = 1; i < N; ++i) {fac[i] = (fac[i - 1] * i) % mod;}invfac[N - 1] = inv(fac[N - 1]);for (int i = N - 2; i >= 0; --i) {invfac[i] = (invfac[i + 1] * (i + 1)) % mod;}}int C(int n, int m) {if (n < m || m < 0) return 0;return fac[n] * invfac[m] % mod * invfac[n - m] % mod;}
}using namespace CNM;void solve() {int n, m;cin >> n >> m;map<int, int>mp;vector<int>a(n + 1);for (int i = 1; i <= n; ++i) {cin >> a[i];mp[a[i]]++;}int maxx = *max_element(a.begin() + 1, a.end());init();vector<int>prefix(n + 1);sort(a.begin() + 1, a.end());vector<int>res(m + 1);for (int i = 1; i <= m; ++i) {if (i < maxx) {res[i] = 0;continue;}int t1 = quick(fac[i],n) % mod;int t2 = 1;for (auto& [x, y] : mp) {t2 *= quick((fac[x] * fac[i - x] % mod), y) % mod;t2 %= mod;}int ans = t1 * inv(t2) % mod;res[i] = ans;}for (int i = 1; i <= m; ++i) {cout << res[i] << "\n";}}signed main() {ios::sync_with_stdio(0);std::cin.tie(0);std::cout.tie(0);int t = 1;//cin >> t;while (t--) {solve();}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

京存非编存储走进中央民族大学

中央民族大学是一所具有鲜明民族特色的综合性全国重点大学&#xff0c;是国家民委、教育部、北京市共建高校。学校前身为1941年成立的延安民族学院。新中国成立后&#xff0c;经中央政府批准&#xff0c;1951年在北京成立中央民族学院&#xff0c;1993年11月更名为中央民族大学…

LeetCode 3158.求出出现两次数字的 XOR 值:化整数为哈希,一次遍历O(1)空间解决

【LetMeFly】3158.求出出现两次数字的 XOR 值&#xff1a;化整数为哈希&#xff0c;一次遍历O(1)空间解决 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-xor-of-numbers-which-appear-twice/ 给你一个数组 nums &#xff0c;数组中的数字 要么 出现一次&a…

golang中如何读取nacos配置中心的信息

golang中如何读取nacos配置中心的信息 golang中如何读取nacos配置中心的信息读取步骤1. 安装 Nacos Go 客户端&#xff1a;2. 编写代码读取配置&#xff1a; 代码说明运行代码注意事项 golang中如何读取nacos配置中心的信息 在 Go 语言中读取 Nacos 配置信息&#xff0c;以下是…

【量化交易】聚宽安装

安装JQData 更换源&#xff1a; 如果使用的是pip默认的PyPI源&#xff0c;可以尝试更换为一个更快的国内镜像源。例如阿里云、豆瓣等提供的PyPI镜像。 更改方法可以通过设置环境变量或者在pip命令中直接指定&#xff1a; PS C:\Users\bilirjs\Documents> pip config set …

No.13 笔记 | 网络安全防护指南:从法律法规到技术防御

一、法律法规 《中华人民共和国网络安全法》要点 遵守法律&#xff1a;所有个人和组织在使用网络时&#xff0c;必须遵守宪法和法律&#xff0c;不得利用网络从事危害国家安全等活动。 个人信息保护&#xff1a;禁止非法获取、出售或提供个人信息。若违反但未构成犯罪&#x…

Oracle低代码平台apex介绍

Oracle APEX&#xff08;Application Express&#xff09;是一个强大的低代码开发平台&#xff0c;它允许开发者快速构建企业级Web应用程序。该平台基于Oracle数据库&#xff0c;并充分利用了数据库的功能来提供安全、可扩展且易于维护的应用程序。 什么是Oracle APEX&#xf…

Lua 协同程序(coroutine)

Lua 协同程序(coroutine) 概述 Lua 语言以其轻量级和易于嵌入的特点,在游戏开发、脚本编写等领域广受欢迎。Lua 中的协同程序(coroutine)是其并发编程的核心特性之一。协同程序提供了一种不同于多线程的并发执行方式,它允许多个代码段交替执行,而不是同时执行。这种机制…

Karmada核心概念

以下内容为翻译&#xff0c;原文地址 Karmada 是什么&#xff1f; | karmada 一、Karmada核心概念 一&#xff09;什么是Karmada 1、Karmada&#xff1a;开放&#xff0c;多云&#xff0c;多集群Kubernetes业务流程 Karmada (Kubernetes Armada)是一个Kubernetes管理系统&…

【NTN 卫星通信】卫星通信的专利

1 概述 好久没有看书了&#xff0c;最近买了本讲低轨卫星专利的书&#xff0c;也可以说是一个分析报告。推荐给喜欢的朋友。 2 书籍截图 图1 封面 图2 波音低轨卫星专利演进 图3 低轨卫星关键技术专利发展阶段 图4 第一页 3 参考文献 产业专利分析报告–低轨卫星通信技术

apisix云原生网关

定义 企业级网关通过域名、路由将请求分发到对应的应用上&#xff0c;通常承载数千个服务的流量&#xff0c;对稳定性有较高要求。 CNCF全景图 选型 Kubernetes抽象出两个核心概念&#xff1a;Service&#xff0c;为多个Pod提供统一的访问入口&#xff1b;Ingress&#xff…

大厂服务降级规范

优质博文&#xff1a;IT-BLOG-CN 服务降级&#xff0c;是指在系统承受较大负载时&#xff0c;根据业务的紧急性和流量情况&#xff0c;对部分非核心或不紧急的服务采取延迟、简化或暂停处理的策略&#xff0c;从而释放系统资源&#xff0c;确保核心业务的高效稳定运行。 为何…

【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置

豆包 (Doubao) 是字节跳动研发的大规模预训练语言模型。 目录 1 安装 2 配置访问凭证 3 客户端初始化 4 设置地域和访问域名 5 设置超时/重试次数 1 安装 通过pip安装PYTHON SDK。 pip install volcengine-python-sdk[ark] 2 配置访问凭证 获取 API Key 访问凭证具体步…

docker容器运行一段时间提示Failed to initialize NVML: Unknown Error

情况描述 服务器使用docker启动容器。启动以后一切正常也能跑程序。但是&#xff0c;在运行一段时间&#xff08;2天左右不等&#xff09;&#xff0c;会发现gpu掉了。输入nvidia-smi提示 Failed to initialize NVML: Unknown Error 主要发生条件是&#xff0c;docker启动的…

Oracle-19g数据库的安装

简介 Oracle是一家全球领先的数据库和云解决方案提供商。他们提供了一套完整的技术和产品&#xff0c;包括数据库管理系统、企业级应用程序、人工智能和机器学习工具等。Oracle的数据库管理系统是业界最受欢迎和广泛使用的数据库之一&#xff0c;它可以管理和存储大量结构化和…

Canmv k230 C++案例1——image classify学习笔记 初版

00 简介 用C编写代码的比mircopython要慢很多&#xff0c;需要编译开发环境&#xff0c;同时使用C更接近底层&#xff0c;效率利用率应该也是更高的&#xff0c;就是需要学习更多的内容&#xff0c;因为从零开始因此比较比较耗时。 注&#xff1a;以下为个人角度的理解&#x…

C#使用HslCommunication程序库快速创建MQTT客户端,实现连接、订阅主题、发送信息

说明: HslCommunication 这个通讯库是非常强大的&#xff0c;其稳定性非常可靠&#xff0c;虽然对于我个人来说在某些功能上配和项目还不算超级完美&#xff0c;但是够用 这个库可以在网上下载。 下面是MQTT客户端的完整的代码 using HslCommunication; using HslCommunicati…

科技云报到:云服务的中场战事,从AI应用开始

科技云报到原创。 从去年的大模型之战&#xff0c;到今年的AI应用之争&#xff0c;云服务正在迈入全新的发展阶段。AI这个杠杆将各家厂商的竞争策略更向前推进了一步。 “云AI”能够孵化出多少可能&#xff1f;在业界眼中&#xff0c;“云AI”则意味着新的悬念&#xff1a;云计…

2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数

2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数 2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数 文章目录 2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数KfRaiseIrql 函数 KfRaiseIrql 函数 /*********************************************************************** NAME …

Python网络爬虫

随着互联网的迅猛发展&#xff0c;数据成为了新的“石油”。人们对于信息的需求日益增涨&#xff0c;尤其是在市场分析、学术研究和数据挖掘等领域。网络爬虫作为一种自动提取网络数据的技术&#xff0c;因其强大的能力而备受关注。而Python&#xff0c;凭借其简洁的语法和丰富…

探索极简计算的新边界:从Uxn虚拟机看未来编程生态

越来越多的开发者追求复杂度和功能性的极致,然而,有一个小众的编程社区选择了截然不同的道路——极简主义。Uxn虚拟机便是这一思潮的代表之一。它通过简洁的指令集和有限的硬件资源模拟,试图打造一种可以在多种设备上运行的便携性编程环境。 与主流的重型操作系统和复杂…