Cod sursa(job #1870385)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 6 februarie 2017 17:01:13
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <fstream>
using namespace std;
ifstream f ("pascal.in");
ofstream g ("pascal.out");
int st[6],dr[6],j,d,r,i,cj,sol,ci;
void curat()
{
    dr[2]=0;
    dr[3]=0;
    dr[5]=0;
}
int mijloc()
{
    if(r%2==0&&j==r/2) return 1;
    return 0;
}
int divide()
{
    if(d==2)
    {
        if(st[2]-dr[2]>0) return 1;
        else return 0;
    }
    if(d==3)
    {
        if(st[3]-dr[3]>0) return 1;
        else return 0;
    }
    if(d==5)
    {
        if(st[5]-dr[5]>0) return 1;
        else return 0;
    }
    if(d==4)
    {
        if(st[2]-dr[2]>=2) return 1;
        return 0;
    }
    if(d==3)
    {
        if(st[2]-dr[2]>0&&st[3]-dr[3]>0) return 1;
        else return 0;
    }
}
int main()
{
    f>>r>>d;
    //i!/((i-j)!*j!)
    for(j=2;j<=r;++j)
    {
        i=j;
        while(i%2==0)
        {
            ++st[2];
            i/=2;
        }
        while(i%3==0)
        {
            ++st[3];
            i/=3;
        }
        while(i%5==0)
        {
            ++st[5];
            i/=5;
        }
    }
    for(j=0;j<=r/2;++j)
    {
        curat();
        for(i=2;i<=j;++i)
        {
            ci=i;
            while(ci%2==0)
            {
                ++dr[2];
                ci/=2;
            }
            while(ci%3==0)
            {
                ++dr[3];
                ci/=3;
            }
            while(ci%5==0)
            {
                ++dr[5];
                ci/=5;
            }
        }
        cj=r-j;
        for(i=2;i<=cj;++i)
        {
            ci=i;
            while(ci%2==0)
            {
                ++dr[2];
                ci/=2;
            }
            while(ci%3==0)
            {
                ++dr[3];
                ci/=3;
            }
            while(ci%5==0)
            {
                ++dr[5];
                ci/=5;
            }
        }
        //g<<dr[2]<<' '<<dr[3]<<' '<<dr[5]<<'\n';
        if(divide())
        {
            sol+=2;
            if(mijloc()) --sol;
        }
    }
    g<<sol;
    return 0;
}