Solution -「ARC 104D」Multiset Mean
\(\mathcal{Description}\)
Link.
读题时间≈想题时间,草。(
给定 \(N,K,M\),对于每个 \(x\in[1,N]\) 的整数 \(x\),统计多重集 \(\{s\}\) 的个数,使得集合元素的平均数为 \(x\),且满足对于任意 \(i\), \(s_i\in[1,N]\) 且 \(\sum_j[s_i=s_j]\le K\),即相同元素至多出现 \(K\) 次。答案对 \(M\) 取模。
\(N,K\le100\)。
\(\mathcal{Solution}\)
首先,看到“平均数”“中位数”之类的 AtCoder 比较喜欢的东西,肯定要进行转化。这里可以转化为“偏移量”:假设已钦定平均数 \(x\),那么一个元素 \(v\) 的贡献就是 \(v-x\),最终满足贡献和为 \(0\) 即可。对于任意多重集 \(\{s\}\),记 \(i\) 在其中出现的次数为 \(k_i~(i\in[1,N])\),那么:
&\sum_{i=1}^nik_i=x|\{s\}|\\
\Leftrightarrow &\sum_{i=1}^n(i-x)k_i=0\\
\Leftrightarrow &\sum_{i=1}^{x-1}(x-i)k_i=\sum_{i=x+1}^n(i-x)k_i
\end{aligned}
\]
写着形象点就是满足:
\]
然后非常 amazing 地发现等号左右描述的是同一形式的问题:求 \(\{k_n\}\) 的个数,使得 \(\sum_{i=1}^nik_i=s\),且满足 \(k_i\in[0,K]\),其中 \(n,s\) 是形式参数。这个问题显然可以 DP:令 \(f(i,j)\) 表示 \(\sum_{t=1}^itk_t=j\) 的方案数,枚举新加入的 \(k_{i+1}\) 的值即可转移。
第一维大小显然为 \(n\),考虑第二维的大小,我们只需要求出能使等式左右两边同时取到的 \(j\) 值。所以 \(j\le K(1+2+\cdots+\lfloor\frac{n}2\rfloor)\)。
最后,求答案时,枚举等式左右同时取到的值,乘法原理乘起来,别忘了乘上 \(k_x\) 的 \(K+1\) 种取值,在减去空集的 \(1\)。(真啰嗦 owo。
总复杂度 \(\mathcal O(N^3K)\) 带小于 \(\frac{1}8\) 的巨小常数(有问题欢迎指出 w),DP 建议刷表,考虑到无用状态数较多,跑得可快啦!
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
inline void wint ( int x ) {
if ( 9 < x ) wint ( x / 10 );
putchar ( x % 10 ^ '0' );
}
const int MAXN = 100;
int N, K, M, f[MAXN + 1][MAXN * ( MAXN / 2 + 1 ) * ( MAXN >> 1 ) / 2 + 5];
inline void addeq ( int& a, const int b ) { ( a += b ) < M ? 0 : a -= M; }
inline void initDP () {
f[0][0] = 1;
int sbound = K * ( N / 2 + 1 ) * ( N >> 1 ) >> 1;
for ( int i = 0; i < N; ++ i ) {
for ( int j = 0, cur; j <= sbound; ++ j ) {
if ( !( cur = f[i][j] ) ) continue;
for ( int k = 0, s = j; k <= K && s <= sbound; ++ k, s += i + 1 ) {
addeq ( f[i + 1][s], cur );
}
}
}
}
inline int solve ( const int x ) {
// k[x-1]+2k[x-2]+...+(x-1)k[1] = k[x+1]+2k[x+2]+...+(n-x)k[n].
int sbound = x - 1 < N - x ? x - 1 : N - x, ret = 0;
sbound = K * sbound * ( sbound + 1 ) >> 1;
for ( int s = 0; s <= sbound; ++ s ) {
addeq ( ret, 1ll * f[x - 1][s] * f[N - x][s] % M );
}
return ( ret * ( K + 1ll ) % M + M - 1 ) % M;
}
int main () {
scanf ( "%d %d %d", &N, &K, &M );
initDP ();
for ( int i = 1; i <= N; ++ i ) {
wint ( solve ( i ) );
putchar ( '\n' );
}
return 0;
}
Solution -「ARC 104D」Multiset Mean的更多相关文章
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Solution -「ARC 110D」Binomial Coefficient is Fun
\(\mathcal{Description}\) Link. 给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...
- Solution -「ARC 124E」Pass to Next
\(\mathcal{Description}\) Link. 有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...
- Solution -「ARC 126E」Infinite Operations
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...
- Solution -「ARC 126F」Affine Sort
\(\mathcal{Description}\) Link. 给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...
- Solution -「ARC 125F」Tree Degree Subset Sum
\(\mathcal{Description}\) Link. 给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...
- Solution -「ARC 125E」Snack
\(\mathcal{Description}\) Link. 把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...
- Solution -「ARC 058C」「AT 1975」Iroha and Haiku
\(\mathcal{Description}\) Link. 称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...
随机推荐
- Zabbix监控报警Lack of free swap space on Zabbix server解决办法
故障描述: Lack of free swap space on Zabbix server 故障原因: 情况一:云主机:因为Zabbix监控没有考虑虚拟主机的swap分区情况. 情况二:物理主机:说 ...
- VC 2010 Express 学生版(中文版)
Microsoft Visual C++ 2010 Express 学生版 下载传送门(提取码:r7sm) 如何安装 拿到压缩文件后,解压到桌面(别怕,安装完后这个文件夹是可以删除的). 在 &quo ...
- 微信小程序输入框上移问题解决
微信小程序的输入框在上面还好,如果不是,在聚焦的时候页面就会上移,上方的页面信息会看不到,影响用户操作 在这里可以手动设置并获取输入框的高度来解决 这种方式虽然有的机子有点卡,但是已经算是比较完美的解 ...
- [未完] Linux 4.4 USB —— spiflash模拟usb大容量存储设备 调试记录 Gadget Mass Stroage
linux 4.4 USB Gadget Mass Stroage 硬件平台: licheepi nano衍生 调试记录 驱动信息 │ This driver is a replacement for ...
- SSTI(以Twig模板引擎为例)
一.模板注入与常见Web注入 就注入类型的漏洞来说,常见 Web 注入有:SQL 注入,XSS 注入,XPATH 注入,XML 注入,代码注入,命令注入等等.注入漏洞的实质是服务端接受了用户的输入,未 ...
- 聊聊dubbo协议
搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. 协议 协议通俗易懂地解释就是通信双方需要遵循的约定. 我们了解的常见的网络传输协议 ...
- git文件管理与索引,深入理解工作原理
前言 这一夜,注定是个不眠之夜,小白和cangls的对话已然进入了白热化.小白孜孜不倦的咨询关于git方面的知识,对索引越来越感兴趣.小白以前存的小电影文件可以进行版本的对比,探索哪个版本画质更好. ...
- C# TCP传输文件示例代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 地底,TypeScript和全球3D建筑发布于CesiumJS 1.70
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 2020年6月1日Cesium JS发布1.70 release ...
- Markdown最新使用说明
Markdown基本语法说明 markdown 和 typora关系:typora是一款实时预览markdown的文本编辑器 本文推荐使用的Markdown编辑器为:Typora (用了多款编辑器,觉 ...