当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的更多相关文章

  1. 【题解】【数组】【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- ...

  2. 【题解】【数组】【Prefix Sums】【Codility】Passing Cars

    A non-empty zero-indexed array A consisting of N integers is given. The consecutive elements of arra ...

  3. Codeforces 837F Prefix Sums

    Prefix Sums 在 n >= 4时候直接暴力. n <= 4的时候二分加矩阵快速幂去check #include<bits/stdc++.h> #define LL l ...

  4. CodeForces 837F - Prefix Sums | Educational Codeforces Round 26

    按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforc ...

  5. 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]代表已经选择 ...

  6. CodeForces 1204E"Natasha, Sasha and the Prefix Sums"(动态规划 or 组合数学--卡特兰数的应用)

    传送门 •参考资料 [1]:CF1204E Natasha, Sasha and the Prefix Sums(动态规划+组合数) •题意 由 n 个 1 和 m 个 -1 组成的 $C_{n+m} ...

  7. CF1303G Sum of Prefix Sums

    点分治+李超树 因为题目要求的是树上所有路径,所以用点分治维护 因为在点分治的过程中相当于将树上经过当前$root$的一条路径分成了两段 那么先考虑如何计算两个数组合并后的答案 记数组$a$,$b$, ...

  8. GenomicRangeQuery /codility/ preFix sums

    首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which ...

  9. codeforces:Prefix Sums分析和实现

    题目大意: 给出一个函数P,P接受一个数组A作为参数,并返回一个新的数组B,且B.length = A.length + 1,B[i] = SUM(A[0], ..., A[i]).有一个无穷数组序列 ...

随机推荐

  1. nodejs 安装 报错解决方案

    win10安装nodejs之后,查看版本号在终端输入node -v成功输出版本号,输入npm -v 之后报错...... 反复安装卸载之后,有点奔溃,最后的解决方案是:手动删除"C:\Use ...

  2. NOIP模拟74

    前言 我就想说一句,T3 给了一个什么牛马大样例!!!!!!!!,气\(^{TM}\)死我!!!!!!! 我的 \(\mathcal{O}(n)\) 算法始终过不掉大样例我 TM ,要不然我就直接上矩 ...

  3. LightningChart XY功能中的常见问题

    LightningChart XY功能中的常见问题 XY 是LightningChart 的重要功能之一,也是被用户使用最广泛的.用户经常对这个功能有着这样那样的疑问,现在将一些常用问题汇总了一下,希 ...

  4. HTML5元素背景知识

    目录 HTML5元素背景知识 语义与呈现分离 元素选用原则 少亦可为多 别误用元素 具体为佳,一以贯之 对用户不要想当然 元素说明体例 ol元素 元素速览 文档和元数据元素 文档和元数据元素 文本元素 ...

  5. Python3 网络通信 网络聊天室 文件传输

    Python3 网络通信 网络聊天室 文件传输 功能描述 该项目将实现一个文字和文件传输的客户端和服务器程序通信应用程序.它将传输和接收视频文件. 文本消息必须通过TCP与服务器通信,而客户端自己用U ...

  6. Golang通脉之函数

    函数是组织好的.可重复使用的.用于执行指定任务的代码块. Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民". 函数定义 Go语言中定义函数使用func关键字 ...

  7. gridlayout在kv中的引用

    from kivy.app import App from kivy.uix.gridlayout import GridLayout class GridLayoutWidget(GridLayou ...

  8. Scrum Meeting 0507

    零.说明 日期:2021-5-7 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 测试 测试 cyy ...

  9. Vue 报错Error in render: “TypeError: Cannot read properties of null (reading ‘xxx’)” found in

    前端vue报错 [Vue warn]: Error in render: "TypeError: Cannot read properties of null (reading 'name' ...

  10. Noip模拟16 2021.7.15

    题目真是越来越变态了 T1 Star Way To Heaven 首先,你要看出这是一个最小生成树的题(妙吧?) 为什么可以呢? 我们发现从两点连线的中点过是最优的,但是上下边界怎么办呢? 我们把上下 ...