ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AGC041D Problem Scores

2021-02-23 18:03:45  阅读:174  来源: 互联网

标签:texttt frac AGC041D 个数 cdots Scores 序列 Problem 总和


很久以前

过了几个月,yc

题目
构造一个值域为 \([1,n]\),长度为 \(n\) 的单调不降序列 \(a_1,a_2,\cdots,a_n\),并且使得 \(\forall 1\leq k\leq n-1\),都有任意 \(k\) 个数之和小于任意 \(k+1\) 个数之和。
求构造方案数,对 \(M\) 取模。
\(2\le n\le 5000,9\times 10^8<M<10^9\),\(M\) 是质数。

题解:

容易发现:

  • \(n\) 为偶数:只要前 \(\frac{n}2\) 个数之和大于后 \(\frac{n-2}2\) 个数之和;
  • \(n\) 为奇数:只要前 \(\frac{n+1}2\) 个数之和大于后 \(\frac{n-1}2\) 个数之和。

\(n\) 为偶数的情况略微复杂于 \(n\) 为奇数的情况,故以 \(n\) 为偶数为例。

只要后 \(\frac{n-2}2\) 个数之和减去前 \(\frac{n}2\) 个数之和为负(记为 \(m\))。

这里前 \(\frac{n}2\) 个数贡献为负,第 \(\frac{n+2}2\) 个数无关紧要,后 \(\frac{n-2}2\) 个数贡献为正。

因此令 \(b_i=\begin{cases}-a_i&(i\le \frac n2)\\0&(i=\frac{n+2}2)\\a_i&(i>\frac{n+2}2)\end{cases}\)

那么 \(a\) 序列和 \(b\) 序列是一一对应的。因此只要算有多少这样的 \(b\) 序列它的总和为负。


对于单调不降序列的计数,有这样一个套路:

\( \texttt{0 0 0}\cdots\texttt{0 0 0}\\ \texttt{0 0 0}\cdots\texttt{0 0 1}\\ \texttt{0 0 0}\cdots\texttt{0 1 1}\\ \ \ \ \ \ \ \ \ \ \ \cdots\\ \texttt{0 0 1}\cdots\texttt{1 1 1}\\ \texttt{0 1 1}\cdots\texttt{1 1 1}\\ \texttt{1 1 1}\cdots\texttt{1 1 1} \)

这是 \((n+1)\) 个长度为 \(n\) 的 01 串。

那么一个长度为 \(n\) 值域为 \([1,n]\) 的序列 可以对应 从以上 01 串取出 \(n\) 个来相加的一种方案(一个串可以取多次,最后一个串至少取一次)。

因此完全背包即可。


这时考虑刚刚那个计算 \(b\) 序列的个数的问题,类似构造这样的串 (以下是 \(n=6\) 的情况):

\( \texttt{ 0 0 0 0 0 0}\\ \texttt{ 0 0 0 0 0 1}\\ \texttt{ 0 0 0 0 1 1}\\ \texttt{ 0 0 0 0 1 1}\\ \texttt{ 0 0 -1 0 1 1}\\ \texttt{ 0 -1-1 0 1 1}\\ \texttt{-1 -1-1 0 1 1} \)
(虽然有两个串长得一模一样,但视为不同)

只要算,从以上串中取出 \(n\) 个来相加(一个串可以取多次,最后一个串至少取一次)且总和小于 \(0\) 的方案数。

又只跟总和有关,所以又等价于从 \(0,1,2,\cdots,2,1,0,-1\) 中取出 \(n\) 个来相加,总和小于 \(0\) 的方案数。(对 \(n\) 为奇数的情况,这个对应是差不多的)

注意到只有最后一个是负的,因此想要总和小于 \(0\) 就一定选了最后一个,这个限制相当于没有用。

先对非负的串做 DP,\(f_{i,j,k}\) 表示前 \(i\) 个串,取了 \(j\) 个,和为 \(k\) 的方案数。

答案即为 \(\sum_{j,k}f_{n,j,k}[k-(n-j)<0]=\sum_{j,k}f_{n,j,k}[j+k<n]\)

由于答案只和 \(j+k\) 有关,把 \(j\) 和 \(k\) 合成一维,就是一个完全背包,\(O(n^2)\)。

标签:texttt,frac,AGC041D,个数,cdots,Scores,序列,Problem,总和
来源: https://www.cnblogs.com/Camp-Nou/p/14437375.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有