Cod sursa(job #1429841)

Utilizator hrazvanHarsan Razvan hrazvan Data 7 mai 2015 12:37:50
Problema Ratphu Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#define MAXCIF 18
#define MAXP 20
long long d[1 << MAXCIF][MAXP];
int nrcif = 0;
char cif[MAXCIF], v[MAXCIF];

int main(){
  FILE *in = fopen("ratphu.in", "r");
  long long n;
  int p;
  fscanf(in, "%lld%d", &n, &p);
  fclose(in);
  while(n > 0){
    cif[nrcif] = n % 10;
    n /= 10;
    nrcif++;
  }
  d[0][0] = 1;
  int i, j, k = 0, ci, vk = 0, nrk;
  for(i = 0; i < (1 << nrcif); i++){
    ci = i;
    nrk = 0;
    for(k = 0; k < nrcif; k++){
      if(!(i & (1 << k))){
        v[nrk] = k;
        nrk++;
      }
    }
    for(j = 0; j < p; j++){
      for(k = 0; k < nrk; k++){
        if(!(i & (1 << v[k]))){
          d[i ^ (1 << v[k])][(j * 10 + cif[v[k]]) % p] += d[i][j];
        }
      }
    }
  }
  FILE *out = fopen("ratphu.out", "w");
  fprintf(out, "%lld", d[(1 << nrcif) - 1][0]);
  fclose(out);
  return 0;
}