莓良心(第二类斯特林数)

莓良心

  • problem
  • solution
  • code

problem

莓在执行任务时,收集到了 nnn 份岩浆能源,其中第 iii 份的能量值是 wiw_iwi ,她
决定将它们分成恰好 kkk 组带回基地,每一组都要有至少 111 份能源。

每一组能源会对运输设备产生负荷值,若该组有 xxx 份能源,这 xxx 份能源能
量值之和为 yyy , 则产生的负荷值为 x×yx × yx×y

每种分组方案产生的负荷是每一组能源产生的负荷值总和,莓想知道所有可
能的分组方案产生的负荷之和对 998244353 取模的结果 。

k≤n≤1e6k\le n\le 1e6kn1e6

solution

nnn 个不同物品分成 kkk 组,球有标号,盒子无标号,显然是第二类斯特林数。

考场上倒是把公式都推出来了,但是没反应过来是第二类斯特林。。。但这不重要,主要是没想到优化计算方式。

暴力求第二类斯特林数:fi,j=fi−1,j∗j+fi−1,j−1f_{i,j}=f_{i-1,j}*j+f_{i-1,j-1}fi,j=fi1,jj+fi1,j1

容斥求第二类斯特林数:∑i=0k(−1)i(ki)(k−i)nk!\frac{\sum_{i=0}^k(-1)^i\binom{k}{i}(k-i)^n}{k!}k!i=0k(1)i(ik)(ki)n

考虑将每个数单独拆开计算贡献,暴力枚举其所在组的个数,然后乘以剩下数分成 k−1k-1k1 组的方案数,时间复杂度是 O(n2)O(n^2)O(n2) 的。

我就卡在这里优化不了了。

考虑若 u,vu,vu,v 分在一组,则对答案有 wu+wvw_u+w_vwu+wv 的贡献,即 ans=∑u=1nwu⋅{nk}+∑u≠v(wu+wv)⋅{n−1k}ans=\sum_{u=1}^nw_u·\left\{\begin{matrix}n\\k\end{matrix}\right\}+\sum_{u\neq v}(w_u+w_v)·\left\{\begin{matrix}n-1\\k\end{matrix}\right\}ans=u=1nwu{nk}+u=v(wu+wv){n1k}

⇒ans=∑wi⋅({nk}+(n−1){n−1k})\Rightarrow ans=\sum_{w_i}·\Bigg(\left\{\begin{matrix}n\\k\end{matrix}\right\}+(n-1)\left\{\begin{matrix}n-1\\k\end{matrix}\right\}\Bigg)ans=wi({nk}+(n1){n1k})

线性筛预处理 (k−i)n(k-i)^n(ki)n,时间复杂度为 O(n)O(n)O(n)

code

#include <cstdio>
#include <iostream>
using namespace std;
#define Pair pair < int, int >
#define int long long
#define mod 998244353
#define maxn 1000005
int n, k, cnt;
int fac[maxn], inv[maxn], Pow1[maxn], Pow2[maxn], prime[maxn];
bool vis[maxn];int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans;
}void init() {fac[0] = inv[0] = 1;for( int i = 1;i <= n;i ++ ) fac[i] = fac[i - 1] * i % mod;inv[n] = qkpow( fac[n], mod - 2 );for( int i = n - 1;i;i -- ) inv[i] = inv[i + 1] * ( i + 1 ) % mod;
}void sieve() {Pow1[1] = Pow2[1] = 1;for( int i = 2;i <= n;i ++ ) {if( ! vis[i] ) {prime[++ cnt] = i;Pow1[i] = qkpow( i, n );Pow2[i] = qkpow( i, n - 1 );}for( int j = 1;j <= cnt and i * prime[j] <= n;j ++ ) {vis[i * prime[j]] = 1;Pow1[i * prime[j]] = Pow1[i] * Pow1[prime[j]] % mod;Pow2[i * prime[j]] = Pow2[i] * Pow2[prime[j]] % mod;if( i % prime[j] == 0 ) break;}}
}int C( int n, int m ) { return fac[n] * inv[m] % mod * inv[n - m] % mod; }Pair calc() {int ans1 = 0, ans2 = 0;for( int i = 0;i <= k;i ++ ) {int t = ( i & 1 ) ? -1 : 1;ans1 = ( ans1 + t * C( k, i ) * Pow1[k - i] % mod ) % mod;ans2 = ( ans2 + t * C( k, i ) * Pow2[k - i] % mod ) % mod;}ans1 = ans1 * inv[k] % mod;ans2 = ans2 * inv[k] % mod;return { ( ans1 + mod ) % mod, ( ans2 + mod ) % mod };
}signed main() {freopen( "ichigo.in", "r", stdin );freopen( "ichigo.out", "w", stdout );scanf( "%lld %lld", &n, &k );int sum = 0;for( int i = 1, w;i <= n;i ++ ) scanf( "%lld", &w ), sum = ( sum + w ) % mod;init();sieve();Pair ans = calc();printf( "%lld\n", ( ans.first + ( n - 1 ) * ans.second ) % mod * sum % mod );return 0;
}

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

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

相关文章

CF1654E Arithmetic Operations(根号分治)

解析 降智谔谔题。 明明都把做法大块想出来&#xff0c;最后很沙雕的一步掉牛角尖里了… 无能狂怒之下写了一发实际复杂度 n2n^2n2 的代码。 不过暴力艹题还是很爽的。 可能确实不太好卡吧&#xff0c;让我自己构造我是卡不掉。 更何况CF应该不会有人和我一样在如此沙雕的地方…

P2575 高手过招

P2575 高手过招 题意&#xff1a; AKN玩游戏玩累了&#xff0c;于是他开始和同伴下棋了&#xff0c;玩的是跳棋&#xff01;对手是wwx&#xff01;这两位上古神遇在一起下棋&#xff0c;使得棋局变得玄幻莫测&#xff0c;高手过招&#xff0c;必有一赢&#xff0c;他们都将用…

PuppeteerSharp: 更友好的 Headless Chrome C# API

前端就有了对 headless 浏览器的需求&#xff0c;最多的应用场景有两个UI 自动化测试&#xff1a;摆脱手工浏览点击页面确认功能模式爬虫&#xff1a;解决页面内容异步加载等问题也就有了很多杰出的实现&#xff0c;前端经常使用的莫过于 PhantomJS 和 selenium-webdriver&…

尽梨了(贪心+dp)

尽梨了problemsolutioncodeproblem 丰之崎学园附近共有 nnn 个商店&#xff0c;在时刻 000 时&#xff0c;英梨梨从学园出发开始购物。 从学园走到任意一个商店&#xff0c;或从一个商店走到另一个商店需要 111 单位时间。 如果英梨梨在时刻 ttt 到达了商店 iii &#xff0c…

CF1612G Max Sum Array

解析 被蓝题虐了。&#xff08;悲 确实不太难&#xff0c;就是没往那边想。 考虑如果某个值的下标分别位 i1,i2,...,ini_1,i_2,...,i_ni1​,i2​,...,in​ 那么如何计算贡献。 每一个下标和前面统计时作为被减数&#xff0c;和后面统计时作为减数&#xff0c;所以 iki_kik​ …

【Acwing 219. 剪纸游戏】

【Acwing 219. 剪纸游戏】 题意&#xff1a; 给定一张 NM 的矩形网格纸&#xff0c;两名玩家轮流行动。 在每一次行动中&#xff0c;可以任选一张矩形网格纸&#xff0c;沿着某一行或某一列的格线&#xff0c;把它剪成两部分。 首先剪出 11 的格纸的玩家获胜。 两名玩家都采取…

中国.NET:东莞+长沙.NET俱乐部现场花絮及合肥、苏州、上海等地活动预

《传承有序》与微软技术的发展历程相似&#xff0c;微软俱乐部的发展经历着沉沉浮浮&#xff0c;曾经随着微软走向封闭与固执&#xff0c;.NET社区年轻一代的声音被忽略&#xff0c;.NET社区后继无人。社区的沉默是可怕的&#xff0c;很多社区沉寂消亡。但是在2018年&#xff0…

团不过(dp)

团不过problemsolutioncodeproblem 由比滨结衣和雪之下雪乃在玩 NimNimNim 游戏。 共有 nnn 堆石子&#xff0c;双方轮流操作&#xff0c;每次可以从一堆非空石子堆中取走任意个石 子&#xff0c;取走最后一个石子的人胜利。 她们决定让由比滨结衣先手&#xff0c;但忘记了每…

【AcWing 235. 魔法珠

【AcWing 235. 魔法珠 题意&#xff1a; 有n堆魔法珠&#xff0c;第i堆有ai个&#xff0c;两个人轮流进行以下操作&#xff1a; 当轮到某人操作时&#xff0c;如果每堆中魔法珠的数量均为 1&#xff0c;那么他就输了。 问谁赢谁输 题解&#xff1a; 经典博弈论问题 注意本…

P5039 [SHOI2010]最小生成树(网络流)

解析 我大受震撼。 真的没想到是网络流。&#xff08;事后诸葛&#xff1a;看几百的数据范围应该试试枚举算法&#xff09; 一道比较开眼界的题吧。 然而用一个十分钟写完的假做法可以骗90分&#xff0c;还是挺香的 首先是一个没什么意思的转化&#xff1a;操作等价于给一条边…

Abp vNext 切换MySql数据库

Abp vNext是Abp的下一代版本&#xff0c;目前还在经一步完善&#xff0c;代码已经全部重写了&#xff0c;好的东西保留了下来&#xff0c;去除了很多笨重的东西&#xff0c;从官宣来看&#xff0c;Abp vNext主要是为了以后微服务架构而诞生的。从源码来看&#xff0c;Abp vNext…

P1199 [NOIP2010 普及组] 三国游戏

P1199 [NOIP2010 普及组] 三国游戏 题意&#xff1a; 有n个武将&#xff0c;每两个武将之间都有默契值&#xff0c;你和电脑玩游戏&#xff0c;轮流选一个。轮到计算机挑选时&#xff0c;它会尝试将对手军队中的每个武将与当前每个自由武将进行一一配对&#xff0c;找出所有配…

P1791 [国家集训队]人员雇佣(网络流)

解析 熟练和固化在有些时候是等价的。 一个看起来喜闻乐见的模型。 n2n^2n2 信息量你在逗我… 结果是&#xff1a;点数 n2n^2n2 TLE&#xff0c;边数 n2n^2n2 AC。 一种之前所没有见过的打开方式。 还是考虑最小割模型&#xff0c;点 iii 向原点连一条 AiA_iAi​ 的边&#xf…

【网络流专练一】UVA五题(UVA12125,UVA11082,UVA10983,UVA1306,UVA10735)

网络流专练March of the Penguins矩阵解压 Matrix DecompressingBuy one, get the rest freeThe K-League混合图的欧拉回路 Euler Circuit什么破网站&#xff0c;多余空格换行都不能有&#xff0c;还nm不报PE/RE只报WA。 少一行换行也不行&#xff0c;这是什么垃圾文本比较。 …

采用.NET CORE的全异步模式打造一款免费的内网穿透工具--NSmartProxy

什么是NSmartProxy&#xff1f;NSmartProxy是一款免费的内网穿透工具。特点跨平台&#xff0c;客户端和服务端均可运行在MacOS&#xff0c;Linux&#xff0c;Windows系统上&#xff1b;使用方便&#xff0c;配置简单&#xff1b;多端映射&#xff0c;一个NSmart Proxy客户端可以…

Acwing 236. 格鲁吉亚和鲍勃(博弈论妙题)

Acwing 236. 格鲁吉亚和鲍勃 题意&#xff1a; 一排网格&#xff0c;将网格从左到右依次编号 1,2,3&#xff0c;…&#xff0c;并将 N 个西洋棋棋子放在不同的网格上&#xff0c;如下图所示&#xff1a; 两个人轮流移动棋子 每次玩家选择一个棋子&#xff0c;并将其向左移动…

.NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯

1&#xff0c;前言开发环境&#xff1a;在 Visual Studio 2017&#xff0c;.NET Core 2.x串口通讯用于设备之间&#xff0c;传递数据&#xff0c;物联网设备中广泛使用串口方式连接通讯&#xff0c;物联网通讯协议 &#xff1a;Modbus 协议 ASCII、RTU、TCP模式是应用层的协议&…

洛谷P1173:[NOI2016] 网格(tarjan、离散化)

解析 看起来很不码农但写起来其实还行的一道题。 主要也是因为我贺题解把所有的雷都避过去了 首先一个比较显然的结论是&#xff1a;通过堵角上的&#xff0c;答案不超过2。 所以本题只要把答案是-1&#xff0c;0&#xff0c;1&#xff0c;2的情况判出来即可。 -1是只有一个…

【无码专区5】01串(大讨论+构造)

因为只有std&#xff0c;没有自我实现&#xff0c;所以是无码专区 主要是为了训练思维能力 solution才是dls正解&#xff0c;但是因为只有潦草几句&#xff0c;所以大部分会有我自己基于正解上面的算法实现过程&#xff0c;可能选择的算法跟std中dls的实现不太一样。 std可能…

Game of Cards Gym - 102822G

Game of Cards Gym - 102822G 题意&#xff1a; 小兔子和小马喜欢玩奇怪的纸牌游戏。现在&#xff0c;他们正在玩一种叫做0123游戏的纸牌游戏。桌子上有几张牌。其中c0标记为0&#xff0c;c1标记为1&#xff0c;c2标记为2&#xff0c;c3标记为3。小兔子和小马轮流玩游戏&…