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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include<vector> #define LL long long using namespace std; const int N=405,M=1000050; int w[N][N],cnt[M],c[N],n,m,mod,sum[N][N]; LL ans=0; inline int () { register int x=0,t=1; register char ch=getchar(); while (ch!='-'&&(ch<'0'||ch>'9')) ch=getchar(); if (ch=='-') t=-1,ch=getchar(); while (ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x*t; } int main() { n=read(),m=read(),mod=read(),cnt[0]=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) w[i][j]=read()%mod; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) sum[i][j]=(sum[i][j-1]+w[i][j])%mod; for(int i=1;i<=m;i++) for(int j=i+1;j<=m;j++) { for(int k=1;k<=n;k++) c[k]=(sum[k][j]-sum[k][i-1]+mod)%mod; for(int k=1;k<=n;k++) { c[k]=(c[k-1]+c[k])%mod; ans+=cnt[c[k]],cnt[c[k]]++; } for(int k=1;k<=n;k++) cnt[c[k]]--; } for(int i=1;i<=m;i++) { for(int k=1;k<=n;k++) c[k]=w[k][i]; for(int k=1;k<=n;k++) { c[k]=(c[k-1]+c[k])%mod; ans+=cnt[c[k]],cnt[c[k]]++; } for(int k=1;k<=n;k++) cnt[c[k]]--; } printf("%lld",ans); return 0; }
|
近期评论