Cod sursa(job #19058)

Utilizator RazvanSSavu Razvan RazvanS Data 18 februarie 2007 18:36:17
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <fstream>

#define N 2500001

using namespace std;


int V[N], V2[N];
int r, d;
int S;

ofstream fout("pascal.out");

void showV(void)
    {int i;
     for(i=1;i<=r/2;i++)
          fout<<V[i]<<" ";
     fout<<'\n';
}      

int nrdiv(int n)
    {int s=0;
     while(n%d==0)
        {n/=d;
         s++;
        }
     
     return s;
    }            

void completeV(void)
      {int i; if(r==0) {V[1]=0; return;}
       V[1]=nrdiv(r);
       for(i=2;i<=r/2;i++)
           V[i]=V[i-1]+nrdiv(r-i+1)-nrdiv(i);
      }
      
void completeV2(void)
      {int i; if(r==0) {V2[1]=0; return;}
       V2[1]=nrdiv(r);
       for(i=2;i<=r/2;i++)
           V2[i]=V2[i-1]+nrdiv(r-i+1)-nrdiv(i);
      }      
      
      
      
int main(void)
      {ifstream fin("pascal.in");
       int i;
       fin>>r>>d;
       fin.close();
       if(d!=4){
                if(d!=6) {
       completeV();
       for(i=1;i<=(r-1)/2;i++)
            if(V[i]>0) S++;
       S*=2;
       if(r%2==0) S+=(V[r/2]>0);
          }
       else{d=2;
            completeV();
            d=3;
            completeV2();
            for(i=1;i<=(r-1)/2;i++)
                if(V[i]>0 && V2[i]>0) S++;
            S*=2;
            if(r%2==0) S+=(V[r/2]>0 && V2[r/2]>0);  
            }      
                    
       }
       else {d=2;
             completeV();
             for(i=1;i<=(r-1)/2;i++)
                if(V[i]>1) S++;
             S*=2;
             if(r%2==0) S+=(V[r/2]>1);
            }    
       fout<<S<<'\n';       
       fout.close();
       
       return 0;
       }