CodeForces 364 A.Matrix(组合数学)
2018-01-06 19:44
393 查看
Description
给出一个数字串s,定义矩阵b=(bij),bij=si⋅sj,问b矩阵的所有和为a的子矩阵个数
Input
一个整数a和一个数字串s(0≤a≤109,1≤|s|≤4000)
Output
输出满足条件的子矩阵个数
Sample Input
10
12345
Sample Output
6
Solution
子矩阵(x,y,z,t)的和为∑i=xy∑j=ztbij=(∑i=xysi)⋅(∑j=ztsj)=(sumy−sumx−1)⋅(sumt−sumz−1),其中sumi=∑j=1isj
枚举1≤i≤j≤|s|,统计sumj−sumi−1=t的(i,j)对数numt,那么答案即为ans=∑i⋅j=anumi⋅numj
注意a=0时,答案为ans=num20+2∑i>0num0⋅numi
Code
给出一个数字串s,定义矩阵b=(bij),bij=si⋅sj,问b矩阵的所有和为a的子矩阵个数
Input
一个整数a和一个数字串s(0≤a≤109,1≤|s|≤4000)
Output
输出满足条件的子矩阵个数
Sample Input
10
12345
Sample Output
6
Solution
子矩阵(x,y,z,t)的和为∑i=xy∑j=ztbij=(∑i=xysi)⋅(∑j=ztsj)=(sumy−sumx−1)⋅(sumt−sumz−1),其中sumi=∑j=1isj
枚举1≤i≤j≤|s|,统计sumj−sumi−1=t的(i,j)对数numt,那么答案即为ans=∑i⋅j=anumi⋅numj
注意a=0时,答案为ans=num20+2∑i>0num0⋅numi
Code
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; typedef pair<int,int>P; const int INF=0x3f3f3f3f,maxn=40005; char s[maxn]; int a,b[maxn],num[maxn]; int main() { while(~scanf("%d",&a)) { scanf("%s",s+1); int n=strlen(s+1); b[0]=0; for(int i=1;i<=n;i++)b[i]=b[i-1]+s[i]-'0'; memset(num,0,sizeof(num)); for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) num[b[j]-b[i-1]]++; ll ans=0; for(int i=1;i*i<=a;i++) { int j=a/i; if(i*j==a&&i<=b &&j<=b ) { ans+=(ll)num[i]*num[j]; if(i!=j)ans+=(ll)num[i]*num[j]; } } if(a==0) { ans+=(ll)num[0]*num[0]; for(int i=1;i<=b ;i++)ans+=2ll*num[0]*num[i]; } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- Codeforces 300C Beautiful Numbers 【组合数学】
- CodeForces 630 G. Challenge Pennants(组合数学)
- CodeForces 57 C.Array(组合数学)
- codeforces 869C The Intriguing Obsession 组合数学,逆元
- Codeforces-785D-Anton and School - 2(组合数学,范德蒙恒等式)
- Codeforces 653G Move by Prime 组合数学
- codeforces 559C Gerald and Giant Chess(组合数学)
- CodeForces 630 H. Benches(组合数学)
- CodeForces 431 D.Random Task(组合数学)
- CodeForces 478 B.Random Teams(组合数学)
- codeforces 690D2 D2. The Wall (medium)(组合数学)
- CodeForces 617 B. Chocolate(组合数学)
- CodeForces 131 C.The World is a Theatre(组合数学)
- CodeForces 145 C.Lucky Subsequence(组合数学+dp)
- CodeForces 319 A.Malek Dance Club(组合数学)
- CodeForces 630G-Challenge Pennants【组合数学】
- CodeForces 630 G. Challenge Pennants(组合数学)
- codeforces 380D. Sereja and Cinema(#223div1 组合数学)
- CodeForces 554C 组合数学
- Codeforces 666C C. Codeword 组合数学+DP