Cod sursa(job #1525248)

Utilizator MihaiBunBunget Mihai MihaiBun Data 14 noiembrie 2015 21:28:28
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.08 kb
#include <fstream>

using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
long n,d,r,i,j,sol,m, v[5000002],v1[5000002],p2,p3,x2,x3,r1,m1;

long zax(long q , long e)
{
            r=n%q;
            x2=0;
            m=n-r;
            while(m%q==0){x2++;m=m/q;}
            sol=0;
            v[0]=0;
            p2=0;
            j=(n-1)/2;
            for(i=1;i<=j;i++)
            {
                if(i%q==0)v[i]=v[i/q]+1;
                       else v[i]=0;
                if(i-1-r==0)p2=x2;
                else
                if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
                          else p2=p2+x2-v[i];
                if(p2>e)sol++;
            }
            if((n-1)%2==0)sol=sol*2;
                 else {
                        sol=sol*2;
                        if(i%q==0)v[i]=v[i/q]+1;
                              else v[i]=0;
                        if(i-1-r==0)p2=x2;
                        else
                        if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
                          else p2=p2+x2-v[i];
                         if(p2>e)sol++;
                      }
           return sol;
}

long zass()
{
            r=n%2;r1=n%3;
            x2=0;x3=0;
            m=n-r;
            m1=n-r1;
            while(m%2==0){x2++;m=m/2;}
            while(m1%2==0){x3++;m1=m1/3;}
            sol=0;
            v[0]=0;
            v1[0]=0;
            p2=0;p3=0;
            j=(n-1)/2;
            for(i=1;i<=j;i++)
            {
                if(i%2==0)v[i]=v[i/2]+1;
                     else v[i]=0;
                if(i-1-r==0)p2=x2;
                else
                if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
                          else p2=p2+x2-v[i];
                if(i%3==0)v1[i]=v1[i/3]+1;
                if(i-1-r1==0)p3=x3;
                else
                if(x3>v[i-1-r1])p3=p3+v1[i-1-r1]-v1[i];
                          else p3=p3+x3-v1[i];

                if((p2>0)&&(p3>0))sol++;
            }
            if((n-1)%2==0)sol=sol*2;
                 else {   sol=sol*2;
                         if(i%2==0)v[i]=v[i/2]+1;
                               else v[i]=0;
                         if(i-1-r==0)p2=x2;
                         else
                         if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
                                   else p2=p2+x2-v[i];
                         if(i%3==0)v1[i]=v1[i/3]+1;
                         if(i-1-r1==0)p3=x3;
                         else
                         if(x3>v[i-1-r1])p3=p3+v1[i-1-r1]-v1[i];
                                   else p3=p3+x3-v1[i];

                         if((p2>0)&&(p3>0))sol++;

                      }
         return sol;
}

int main()
{
     f>>n>>d;

     switch (d){
        case 2:
             g<<zax(2,0);

            break;
        case 3:
             g<<zax(3,0);

            break;
        case 4:
            g<<zax(2,1);

            break;
        case 5:
            g<<zax(5,0);

            break;
        case 6:
            g<<zass();

            break;
        }
    return 0;
}