Cod sursa(job #1661699)

Utilizator KOzarmOvidiu Badea KOzarm Data 24 martie 2016 08:39:24
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <fstream>

using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
int n,p,i,x,total;

struct el
{
    int a,b;
}c0,c1,c2;

void imparte(int x,int p)
{
    switch (p)
    {
    case 6:
        {
            while(x%2==0)
            {
                c1.a++;
                x/=2;
            }
            while(x%3==0)
            {
                c1.b++;
                x/=3;
            }
            break;
        }
    case 4:
        {
            while(x%2==0)
            {
                c1.a++;
                x/=2;
            }
            break;
        }
        default:
        {
            while(x%p==0)
            {
                c1.a++;
                x/=p;
            }
            break;
        }
    }
}

int main()
{
    fin>>n>>p;

    for(i=1;i<(n+1)/2;i++)
    {
        x=n-i+1;
        c1.a=0;
        c1.b=0;
        imparte(x,p);
        c0.a+=c1.a;
        c0.b+=c1.b;
        c1.a=0;
        c1.b=0;
        imparte(i,p);
        c2.a+=c1.a;
        c2.b+=c2.b;
        if(p==6)
        {
            if(c0.a-c2.a>0&&c0.b-c2.b>0)
                total+=2;
        }
        else
        if(p==4)
        {
            if((c0.a-c2.a)/2>0)
                total+=2;
        }
        else
            if(c0.a-c2.a>0)
                total+=2;
    }
    if(n%2==0)
    {
        x=n-i+1;
        c1.a=0;
        c1.b=0;
        imparte(x,p);
        c0.a+=c1.a;
        c0.b+=c1.b;
        c1.a=0;
        c1.b=0;
        imparte(i,p);
        c2.a+=c1.a;
        c2.b+=c2.b;
        if(p==6)
        {
            if(c0.a-c2.a>0&&c0.b-c2.b>0)
                total++;
        }
        else
        if(p==4)
        {
            if((c0.a-c2.a)/2>0)
                total++;
        }
        else
            if(c0.a-c2.a>0)
                total++;
    }
    fout<<total;
    return 0;
}