Cod sursa(job #2037157)

Utilizator dragos231456Neghina Dragos dragos231456 Data 11 octombrie 2017 20:09:10
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int v[4][5000005];
int r,d,nr,x,rez,last;

void umple(int l,int val)
{
    x=val; v[l][val]=1;
    while(x*val<=r)
    {
        v[l][x*val]=v[l][x]+1;
        x*=val;
    }
    for(int i=1;i<=r;++i)
    {
        v[l][i]+=v[l][i-1];
    }
}

void factoriale()
{
    x=d;
    if(d==4) x/=2;
    if(d==6) x/=3;
    umple(1,x);
    if(d==6) umple(2,3);
}

bool ver1(int i)
{
    return(v[1][r]>v[1][i]+v[1][r-i]);
}

bool ver2(int i)
{
    return (v[1][r]>1+v[1][i]+v[1][r-i]);
}

bool ver3(int i)
{
    return(v[1][r]>v[1][i]+v[1][r-i] && v[2][r]>v[2][i]+v[2][r-i]);
}

bool cond(int i)
{
    if(d==2 || d==3 || d==5) return ver1(i);
    if(d==4) return ver2(i);
    else return ver3(i);

}

int main()
{
    f>>r>>d;
    factoriale();
    for(int i=0;i<=r/2;++i)
    {
        last=rez;
        if(cond(i))
        {
            ++rez;
        }
    }
    if(r%2==0) rez+=last;
    else rez+=rez;
    g<<rez;
    return 0;
}