Cod sursa(job #405653)

Utilizator freak93Adrian Budau freak93 Data 28 februarie 2010 15:15:19
Problema Plus Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>

using namespace std;

const char iname[]="plus.in";
const char oname[]="plus.out";

typedef long long lint;

ifstream f(iname);
ofstream g(oname);

lint n,s,a[3][4],x,y,i,p,k,v;

lint many(lint x,lint s)
{
    if(a[x][0]==0)
        return s==0;
    if(a[x][0]==1)
        return a[x][1]>=s;
    if(a[x][0]==2)
        if(a[x][1]+a[x][2]<s)
            return 0;
        else
            return min(a[x][1],s)-max(s-a[x][2],(long long)0)+1;
    y=a[x][3];
    a[x][0]=2;
    v=0;
    for(lint i=0;i<=y;++i)
        v+=many(x,s-i);
    return v;
}

int main()
{
    f>>s;
    for(i=0;i<3;++i)
        f>>x>>y,a[++y][++a[y][0]]=x;
    for(i=1;i<=a[0][0];++i)
        n+=a[0][i];
    for(i=1;i<=a[2][0];++i)
        p+=a[2][i];
    for(i=s;i<=p&&i-s<=n;++i)
        k+=many(2,i)*many(0,i-s);
    for(i=1;i<=a[1][0];++i)
        k*=(a[1][i]+1);
    g<<k<<"\n";

    f.close();
    g.close();

    return 0;
}