There is no commentSelect some text and then click Comment, or simply add a comment to this page from below to start a discussion.
#include <iostream>
#include <vector>
using namespace std;
long long rec(int p[], int num){
unsigned long long fin =1;
long long v =0;
int x=0;
int q=0;
int vp[1000]={0};
vector<int> myList;
for (int i=0;i<num;i++)
vp[i]=p[i];
for (int k = 0; k < num; k++)
if(p[k]<0)
return 0 ;
else if (p[k]<p[k+1]&& k!=num-1)
return 0 ;
else
q=q+p[k];
for (int i = 0; i< num; i++){
for (int j = 0; j < vp[i]; j++){
x=vp[i]-j;
for (int k = i+1; k < num; k++){
p[k]=p[k]-1;
if (p[k]>=0)
x=x+1;
else{
x=x;
k=num;
}
}
myList.push_back(x);
}
for (int k = 0; k < num; k++)
p[k]=vp[k];
}
for(int s=2;s<=q;s++){
fin=fin*s;
// cout << fin << " ";
for(int f=0;f<myList.size();f++){
if (fin%myList[f]==0 &&myList[f]!=1){
fin=fin/myList[f];
myList.erase(myList.begin()+f);
}
}
for(int f=0;f<myList.size();f++){
if (myList[f]==1)
myList.erase(myList.begin()+f);
}
v= fin / 1000000009;
if (v!=0)
// cout << "fin=" << fin << "v=" << v<<endl;
fin=fin-v*1000000009;
}
// fin = fin % 1000000009;
return fin;
}
int main(){
int T, n;
int p[1000];
long long a[50]={0};
cin >> T;
if (T <= 50){
for (int i = 1; i <= T; i++){
cin >> n;
if (n <= 1000&& n>0){
for (int u = 0; u < n; u++)
cin >> p[u];
a[i] = rec(p, n);
}
else
return 0;
}
for (int i = 1; i <= T; i++)
cout << "Case " << i << ": "<< a[i]<< endl;
}
else
return 0;
}