Processing math: 2%

AGC041D Problem Scores

很久以前,yc 是个菜鸡,面对 AGC049D 一筹莫展,在巨神 vxlimo 的指点下才终于会了。

过了几个月,yc 觉得自己很强,就在此时又受到了 XVIII Open Cup of Ural D 的攻击。巨神 vxlimo 大手一挥,yc 便认识到了自己的渺小。

后来,yc 又看到了这题。吸收了之前的教训,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^9M 是质数。

题解:

容易发现:

  • 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)。

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 有关,把 jk 合成一维,就是一个完全背包,O(n^2)

#include<bits/stdc++.h>
const int N=5003;
int n,M,f[N],s;
int main(){
	scanf("%d%d",&n,&M);
	f[0]=1;
	for(int i=1,a;i<=n;i++){
	  a=std::min(i,n-i+1);
	  for(int j=a;j<n;j++)f[j]=(f[j]+f[j-a])%M;
	}
	for(int i=0;i<n;i++)s=(s+f[i])%M;
	printf("%d\n",s);
	return 0;
}

posted on   Dreamunk  阅读(152)  评论(0编辑  收藏  举报

编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示