64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
void slove(int N, int f, int *ls, int* rs)
{
if (N<=1)
{
for (int i=0; i<f; i++)
rs[i]=0;
if (N==1) rs[ls[0]%f]=1;
return;
}
int N1 = N/2;
int N2 = N-N1;
int * rs1 = new int[f];
int * rs2 = new int[f];
slove(N1, f, ls, rs1);
slove(N2, f, ls+N1, rs2);
for (int i=0; i<f; i++)
{
rs[i]=rs1[i]+rs2[i];
for (int j=0; j<f; j++)
rs[i] += rs1[j] * rs2[(f-j+i)%f];
}
delete [] rs1;
delete [] rs2;
}
int main()
{
int N, f;
cin >> N >> f;
int * ls = new int[N];
for (int i=0; i<N; i++)
cin >> ls[i];
int * rs = new int[f];
slove(N, f, ls, rs);
cout << rs[0] << endl;
delete [] rs;
delete [] ls;
return 0;
}