Pagini recente » Cod sursa (job #1147391) | Cod sursa (job #2696992) | Cod sursa (job #3198456) | Cod sursa (job #1023308) | Cod sursa (job #369857)
Cod sursa(job #369857)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("plus.in");
ofstream fo("plus.out");
vector<int> v[3];
int S,tip1,tip2,tip3,nr1,nr2,nr3,sm1,s0,s1;
inline int min(int x,int y){ return x<y?x:y; }
inline int max(int x,int y){ return x>y?x:y; }
long long pos2(int x,int y,int sum){
if (sum>(x+y)) return 0;
int lmin=max(0,sum-y),lmax=min(x,sum);
return (long long)(lmax-lmin+1);
}
long long nrp(vector<int> v,int sum){
if (v.size()==0){
if (sum==0) return 1; else return 0;
} else
if (v.size()==1) return 1; else
if (v.size()==2) return pos2(v[0],v[1],sum); else {
long long rez=0;
int limita=min(v[0],sum);
for (int i=0;i<=limita;++i) rez+=pos2(v[1],v[2],sum-i);
return rez;
}
}
int main(){
fi>>S;
fi>>nr1>>tip1>>nr2>>tip2>>nr3>>tip3;
v[tip1+1].push_back(nr1);
v[tip2+1].push_back(nr2);
v[tip3+1].push_back(nr3);
s1=sm1=s0=0;
long long rez=0;
for (unsigned int i=0;i<v[0].size();++i) sm1+=v[0][i];
for (unsigned int i=0;i<v[1].size();++i) s0+=v[1][i];
for (unsigned int i=0;i<v[2].size();++i) s1+=v[2][i];
for (int i=S;i<=s1;++i){
int nrm1=i-S;
if (nrm1<=sm1){
long long parts=nrp(v[0],nrm1);
parts*=nrp(v[2],i);
rez+=parts;
}
}
for (unsigned int i=0;i<v[1].size();++i) rez*=(long long)(v[1][i]+1);
fo<<rez<<"\n";
return 0;
}