当前位置: 首页 > news >正文

题解:AT_agc052_c [AGC052C] Nondivisible Prefix Sums

题意:很简单了,不再赘述。

做法:

首先去掉一种很明显不行的方案即数的和为 \(P\) 的倍数,那不为 \(P\) 的倍数的有多少种呢?

因为不像正常的一样有 \(a_i=0\),不能说每次后面怎么填都有唯一一个对应,我们考虑记两个东西 \(f,g\) 代表长度为 \(n\) 的序列有多少个模 \(P\)\(0\) 的和不为 \(0\) 的,有转移式:

\[f_{i+1} = g_i \]

\[g_{i+1}=f_{i} + \frac{P-2}{P-1}g_i \]

然后我们就要算有多少个和不为 \(P\) 倍数且满足条件的数组。

首先我们不妨设最多的为 \(1\),如果不是我们乘上众数的逆元即可。

那么我们想一个事情,最后的序列一定是形如一段 \(1\) 然后间隔一个非 \(1\) 的数 \(b_i\),其实等同于我们一直在按 \(1\) 这样的小步在长度为 \(P\) 的环上走,然后一个大步,那我们的大步肯定是尽量用来跨过 \(0\) 的位置,因此我们其实可以很方便地得出来一个必要条件,假设有 \(k\) 个非 \(1\) 的元素 \(b_1,b_2\cdots b_k\),我们肯定要满足 \(n-k\le\sum\limits_{i=1}^k{P-b_i} + P-1\) 的,可以很方便用构造证明必要性。

那么是否一定是充分的呢?我们考虑反证,如果这个必要条件不成立,那么就要求我这个序列总和一定是至少为 \(\sum\limits_{i=1}^k{P-b_i} + P + \sum\limits_{i=1}^k b_i = P(k+1)\),同时不能是 \(P\) 的倍数,所以我们需要跨过 \(0\) 这个位置 \(k+1\) 次,但是只有 \(k\) 个数帮我们跨,所以矛盾了,充分性证毕。

然后我们就可以用这个条件去计算,计算合法的比较困难,我们考虑计算不合法的,这样右侧的柿子就直接被限制在 \(n\) 的范围内了,可以直接跑背包算右边的东西。注意到 \(P-b_i\) 其实是一个区间状物,所以可以前缀和优化做到 \(O(n^2)\)

那么还剩最后一步,因为我们 dp 出来这个东西是没有加入众数排位置的,所以对于 \(dp_{i,j}\)\(b\) 用了 \(i\) 个数且 \(\sum P-b_k = j\),要求 \(n-i-j\) 这个东西不能是 \(P\) 的倍数,贡献为 \(dp_{i,j}\times\binom{n}{i}\times(P-1)\),最后这个 \(P-1\) 是众数有 \(P-1\) 种。

按上述过程计算即可。

http://www.hskmm.com/?act=detail&tid=13741

相关文章:

  • 寻路算法
  • 2025年9月22日 - 20243867孙堃2405
  • day 1
  • [Paper Reading] METAGPT: META PROGRAMMING FOR A MULTI-AGENT COLLABORATIVE FRAMEWORK
  • 二进制 - 20243867孙堃2405
  • 学习问题日记-1
  • 记一次生产环境内存溢出记录
  • 四舍六入五成双
  • 借助 Apache Phoenix,使用标准 SQL 和 JDBC 接口来操作 HBase
  • 学生信息管理系统
  • 如何让AI生成多页面APP原型图?AI原型设计实用指南
  • 代码随想录算法训练营第五天 | leetcode 242 349 202 1
  • CF2146 Codeforces Round 1052 (Div. 2) 游记
  • 原码补码反码与位操作
  • 接口
  • 特殊句式
  • 9月22日
  • 20250922
  • 易路斩获招聘、薪酬两大重磅人力资源奖项,尽显行业领军风范!
  • 作业
  • RAG系统嵌入模型怎么选?选型策略和踩坑指南
  • (应该写的比较清晰)D2. Max Sum OR (Hard Version)
  • Linux运维
  • day001
  • 第一次编程作业
  • 7
  • Xilnx FPGA 资源结构
  • 2025年录音转文字技术解析与实用工具评测 - 指南
  • CF2147H Maxflow GCD Coloring 题解
  • Uiverse.io 2.0 震撼发布:新增 3000+ 动效组件!适配 React、Vue