[atAGC052C]Nondivisible Prefix Sums
当1为$a_{i}$中出现次数最多的元素(之一),则有以下结论——
结论:$a_{i}$合法当且仅当$P\not\mid \sum_{i=1}^{n}a_{i}$且$\sum_{i=1}^{n}[a_{i}=1]\le (P-1)+\sum_{1\le i\le n,a_{i}\ne 1}(P-a_{i})$
证明:
必要性——
若$P\mid \sum_{i=1}^{n}a_{i}$,则取整体作为前缀即不满足条件
同时,当1的个数多于该值,假设有$k$个非1的数(即$\sum_{i=1}^{n}[a_{i}\ne 1]$),则$\sum_{i=1}^{n}a_{i}\ge (k+1)P$
根据$P\not\mid \sum_{i=1}^{n}a_{i}$,即$\sum_{i=1}^{n}a_{i}>(k+1)P$
考虑求其前缀和,对于其中前缀和恰大于$P$、$2P$、……、$(k+1)P$的位置(不难证明这些位置必然存在且各不相同),若恰大于$tP$的位置上为1,同时其上一个位置必然小于等于$tP$,即恰好为$tP$,即不合法
因此,这些位置上必然都不为1,因此至少有$k+1$个非1的数,矛盾
充分性——
构造其重新排列后的$a'_{i}$,具体来说,当已经确定$a'_{1},a'_{2},...,a'_{k}$后,来确定$a'_{k+1}$
令$x$为$a_{i}$剩下(除去$a'_{1},a'_{2},...,a'_{k}$)的数中出现次数最多的元素(之一),对其分类讨论:
1.若$P\not\mid \sum_{i=1}^{k}a'_{i}+x$,令$a'_{k+1}=x$
2.若$P\mid \sum_{i=1}^{k}a'_{i}+x$,任取另一个剩下的元素$y\ne x$,令$a'_{k+1}=y$且$a'_{k+2}=x$
关于上述两者,唯一有可能导致其不合法的即第2类中不存在$y$的情况,即仅剩下的元素仅含$x$
若剩下的元素中仅有1个$x$,即与$P\not\mid \sum_{i=1}^{n}a_{i}$矛盾,因此至少剩下两个$x$
在这种情况下,构造过程中,任意时刻出现次数最多(且唯一最多)的元素都是$x$
关于这个结论,考虑当某一时刻,某一个元素出现次数大于等于$x$出现次数-1,则简单分类讨论:
1.此时$x$作为出现次数最多的元素,其出现次数必然仍大于等于$x$出现次数-1
2.此时$x$不作为出现次数最多的元素,则假设为$y$,至多使用一个$y$,那么$y$出现次数大于等于$x$出现次数-1
换言之,由此可以说明之后任意时刻都存在一个元素出现次数大于等于$x$的出现次数-1
而最终,不存在这样的元素(其余元素出现次数都为0,而$x$出现次数至少为2),因此即任意时刻不存在出现次数大于等于$x$出现次数-1的元素,进而推出$x$任意时刻都是唯一最多的元素
由此,可以得到$x$为初始状态中出现次数最多的元素,即有$x=1$
根据构造过程,可以发现$a_{i}$之后恰好会有$P-a_{i}$个1,以及最初也必然有$P-1$个1,此时若还有剩下的1,即可得到$\sum_{i=1}^{n}[a_{i}=1]>(P-1)+\sum_{1\le i\le n,a_{i}\ne 1}(P-a_{i})$,矛盾
因此,即证明不存在这种不合法的情况,构造成立
而对于普通的序列$a_{i}$(即1不为$a_{i}$中出现次数最多的元素),若$x$为其中出现次数最多的元素,将所有元素在模$P$意义下除以$x$,得到序列$b_{i}\equiv \frac{a_{i}}{x}(mod\ P)$,不难证明$a_{i}$合法等价于$b_{i}$合法
同时,$b_{i}$合法根据结论即等价于$P\not\mid \sum_{i=1}^{n}b_{i}$且$\sum_{i=1}^{n}[b_{i}=1]\le (P-1)+\sum_{1\le i\le n,b_{i}\ne 1}(P-b_{i})$,同时前者又等价于$P\not\mid \sum_{i=1}^{n}a_{i}$
接下来,考虑统计答案,答案可以通过容斥计算,即等于$P\not\mid \sum_{i=1}^{n}a_{i}$的序列数,减去$P\not\mid \sum_{i=1}^{n}a_{i}$且$\sum_{i=1}^{n}[b_{i}=1]>(P-1)+\sum_{1\le i\le n,b_{i}\ne 1}(P-b_{i})$的序列数
对于前者,记为$f_{n}$,则有
$$
f_{n}=(P-2)f_{n-1}+(P-1)((P-1)^{n-1}-f_{n-1})=(P-1)^{n}-f_{n-1}
$$
(初始状态为$f_{0}=0$)
根据等比数列求和,答案即
$$
f_{n}=(-1)^{n}\sum_{i=1}^{n}(1-P)^{i}=(-1)^{n}\frac{(1-P)-(1-P)^{n+1}}{P}=\frac{(P-1)^{n+1}-(-1)^{n}(P-1)}{P}
$$
对于后者,根据式子,此时$a_{i}$中最大值出现必然唯一
另一方面,由于一个模$P$意义下的完系中所有数乘上$x$(满足$P\not\mid x$)后仍然是完系,即最大值并不影响每一个数出现的概率(情况),即可以统计1为出现次数最多的情况,并乘上$P-1$即可
(更通俗的来说,在$[1,P)$中随机一个数在乘上$x$并对$P$取模,等价于直接在$[1,P)$中随机一个数)
接下来,枚举1的个数$k$,即要求$\sum_{1\le i\le n,a_{i}\ne 1}(P-a_{i})-k\not\mid P$且$\sum_{1\le i\le n,a_{i}\ne 1}(P-a_{i})\le k-P$
根据后者,这些数的和是$o(n)$的,即用$f_{i,j}$表示$i$个$[1,P-2]$之间的数,和为$j$的方案数,注意到两维都是$o(n)$级别的,且转移通过前缀和可以优化到$o(1)$,总复杂度即$o(n^{2})$
最终,(这一部分)答案即$\sum_{i=0}^{n}{n\choose i}\sum_{0\le j\le i-P,j\not\equiv i(mod\ P)}f_{n-i,j}$
总复杂度为$o(n^{2})$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 5005
4 #define mod 998244353
5 int n,p,ans,c[N][N],f[N][N];
6 int pow(int n,int m){
7 int s=n,ans=1;
8 while (m){
9 if (m&1)ans=1LL*ans*s%mod;
10 s=1LL*s*s%mod;
11 m>>=1;
12 }
13 return ans;
14 }
15 int main(){
16 for(int i=0;i<N;i++){
17 c[i][0]=c[i][i]=1;
18 for(int j=1;j<i;j++)c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
19 }
20 scanf("%d%d",&n,&p);
21 ans=pow(p-1,n+1);
22 if (n&1)ans=(ans+p-1)%mod;
23 else ans=(ans+mod-p+1)%mod;
24 ans=1LL*ans*pow(p,mod-2)%mod;
25 f[0][0]=1;
26 if ((n%p)&&(n>=p))ans=(ans+mod-p+1)%mod;
27 for(int i=1;i<=n;i++){
28 for(int j=1;j<=n;j++)f[i-1][j]=(f[i-1][j-1]+f[i-1][j])%mod;
29 for(int j=1;j<=n;j++){
30 if (j-(p-2)<=0)f[i][j]=f[i-1][j-1];
31 else f[i][j]=(f[i-1][j-1]-f[i-1][j-(p-2)-1]+mod)%mod;
32 if ((j<=n-i-p)&&(j%p!=(n-i)%p))ans=(ans+mod-1LL*(p-1)*c[n][i]%mod*f[i][j]%mod)%mod;
33 }
34 }
35 printf("%d",ans);
36 }
[atAGC052C]Nondivisible Prefix Sums的更多相关文章
- 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
A non-empty zero-indexed string S is given. String S consists of N characters from the set of upper- ...
- 【题解】【数组】【Prefix Sums】【Codility】Passing Cars
A non-empty zero-indexed array A consisting of N integers is given. The consecutive elements of arra ...
- Codeforces 837F Prefix Sums
Prefix Sums 在 n >= 4时候直接暴力. n <= 4的时候二分加矩阵快速幂去check #include<bits/stdc++.h> #define LL l ...
- CodeForces 837F - Prefix Sums | Educational Codeforces Round 26
按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforc ...
- Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya's Function ] [ F. Prefix Sums ]
PROBLEM D - Round Subset 题 OvO http://codeforces.com/contest/837/problem/D 837D 解 DP, dp[i][j]代表已经选择 ...
- CodeForces 1204E"Natasha, Sasha and the Prefix Sums"(动态规划 or 组合数学--卡特兰数的应用)
传送门 •参考资料 [1]:CF1204E Natasha, Sasha and the Prefix Sums(动态规划+组合数) •题意 由 n 个 1 和 m 个 -1 组成的 $C_{n+m} ...
- CF1303G Sum of Prefix Sums
点分治+李超树 因为题目要求的是树上所有路径,所以用点分治维护 因为在点分治的过程中相当于将树上经过当前$root$的一条路径分成了两段 那么先考虑如何计算两个数组合并后的答案 记数组$a$,$b$, ...
- GenomicRangeQuery /codility/ preFix sums
首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which ...
- codeforces:Prefix Sums分析和实现
题目大意: 给出一个函数P,P接受一个数组A作为参数,并返回一个新的数组B,且B.length = A.length + 1,B[i] = SUM(A[0], ..., A[i]).有一个无穷数组序列 ...
随机推荐
- vue常见的三种组件通讯—props,$refs,this.$emit
一.父组件--->子组件 props 1.特点:props是用于父组件向子组件传递数据信息(props是单向绑定的,即只能父组件向子组件传递,不能反向 2.用法:父组件中使用子组件时,绑定要传递 ...
- 洛谷4248 AHOI2013差异 (后缀数组SA+单调栈)
补博客! 首先我们观察题目中给的那个求\(ans\)的方法,其实前两项没什么用处,直接\(for\)一遍就求得了 for (int i=1;i<=n;i++) ans=ans+i*(n-1); ...
- shopping cart
#Author:Kevin_hou #定义产品列表 product_list =[ ('HUAWEI',5999), ('Watch',500), ('Nike',800), ('Toyota',20 ...
- 【UE4 设计模式】设计模式一些概念
定义 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性. 四人帮 GOF ( Gang of Four ...
- Coursera Deep Learning笔记 序列模型(二)NLP & Word Embeddings(自然语言处理与词嵌入)
参考 1. Word Representation 之前介绍用词汇表表示单词,使用one-hot 向量表示词,缺点:它使每个词孤立起来,使得算法对相关词的泛化能力不强. 从上图可以看出相似的单词分布距 ...
- 【技术博客】在Unity3d中实现烟花效果
在游戏开发中,我们经常需要用到类似烟花的效果.在Unity3d中,实现烟花效果的方法不止一种,我选用了Unity3d中新添加的粒子特效工具--visual effect graph来进行实现. 实现过 ...
- Noip模拟41 2021.8.16
T1 你相信引力吗 对于区间的大小关系问题,往往使用单调栈来解决 这道题的优弧和劣弧很烦,考虑将其等价的转化 由于所有的合法情况绕过的弧都不会经过最高的冰锥, 又因为环可以任意亲定起点,这样可以直接把 ...
- 2021.10.26考试总结[冲刺NOIP模拟16]
T1 树上的数 \(DFS\)一遍.结构体存边好像更快? \(code:\) T1 #include<bits/stdc++.h> using namespace std; namespa ...
- 8.18考试总结[NOIP模拟43]
又挂了$80$ 好气哦,但要保持优雅.(草 T1 地衣体 小小的贪心:每次肯定从深度较小的点向深度较大的点转移更优. 模拟一下,把边按链接点的子树最大深度排序,发现实际上只有上一个遍历到的点是对当前考 ...
- 转移指令原理和Inline Hook
目录 转移指令原理和Inline Hook 转移指令 操作符offset jmp指令 根据位移进行转移的jmp指令 插播HOOK知识 Inline Hook Inline Hook 原理 Hook代码 ...