Cod sursa(job #2910637)

Utilizator carinamariaCarina Maria Viespescu carinamaria Data 23 iunie 2022 10:42:33
Problema Pascal Scor 40
Compilator cpp-64 Status done
Runda 3_iulie Marime 1.63 kb
#include <fstream>
using namespace std;
ifstream cin("pascal.in");
ofstream cout("pascal.out");
long long a, b, i, j, L, nr, k, aux, maxx, poz, d, r, c, ramas2, ramas3, un2, un3;
int f2(int n){
    int dd=2;
    int aux=0;
    while(dd<=n){
        aux+=n/dd;
        dd*=2;
    }
    return aux;

}
int f3(int n){
    int dd=3;
    int aux=0;
    while(dd<=n){
        aux+=n/dd;
        dd*=3;
    }
    return aux;

}
int fact(int n){
    int cnt=0;
    int cnt2=0;
    /// exponentul lui d in n!
    if(d!=6 && d!=4){
        int dd=d;
        while(dd<=n){
            cnt+=n/dd;
            dd*=d;
        }
    }
    else{
        if(d==4){
            cnt=f2(n);
            if(cnt%2)
                un2=1;
            cnt/=2;

        }
        else{
            cnt=f2(n);
            cnt2=f3(n);
            cnt=min(cnt, cnt2);
            if(cnt2>cnt)
                un3=cnt2-cnt;
            else
                un2=cnt-cnt2;
        }

    }
    return cnt;


}
int main() {
    cin>>r>>d;
    ///(i!)/((i-j)!*j!)


    for(i=1;i<r;i++){
        un2=0;
        un3=0;
        a=fact(r);

        ramas2=un2;
        ramas3=un3;
        un2=0;
        un3=0;

        b=fact(r-i);

        ramas2-=un2;
        ramas3-=un3;
        un2=0;
        un3=0;

        c=fact(i);

        ramas2-=un2;
        ramas3-=un3;

        ///cout<<a<<" "<<b<<" "<<c<<" "<<ramas2<<" "<<ramas3<<"\n";
        if(a-(b+c)>1)
            nr++;
        else
        if(a-(b+c)==1){
            if(ramas2>=0 && ramas3>=0)
                nr++;
        }
    }
    cout<<nr;
}