Cod sursa(job #343651)

Utilizator mgntMarius B mgnt Data 26 august 2009 17:35:43
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
using namespace std;

int const maxr = 5000000;
int F[1+maxr];
int C[1+maxr];

void count (int p, int n) {
  C[1]=0; int s; for ( s=2; n>=s; ++s ) {
    if ( 0 == (s%p) ) { C[s]=1+C[s/p]; } else { C[s]=0; }
  }
}

void filter(int dt, int n) {
  int fn=0, s;
  for ( s=1; n>=s; ++s ) {
    fn += C[(n-s+1)];
    fn -= C[s];
    if (fn < dt) { F[s]=0; }
  }
}

void prune (int d, int n) {
  if (2 == d) { count(2,n); filter(1,n); return; }
  if (3 == d) { count(3,n); filter(1,n); return; }
  if (4 == d) { count(2,n); filter(2,n); return; }
  if (5 == d) { count(5,n); filter(1,n); return; }
  if (6 == d) { count(2,n); filter(1,n);
                count(3,n); filter(1,n); return; }
}

int
main ( ) {
  FILE * fl = fopen("pascal.in", "r");
  int R,D,s,a=0; fscanf(fl,"%d %d",&R,&D);
  fclose(fl);
  F[0]=0; for ( s=1; R>=s; ++s ) { F[s]=1; }
  prune(D,R);
  for ( s=0; R>=s; ++s ) {
    if ( 0 != F[s] ) { ++ a; }
  }
  fl=fopen("pascal.out", "w");
  fprintf(fl, "%d\n", a);
  fclose(fl);
  return 0;
}