Cod sursa(job #1429848)

Utilizator hrazvanHarsan Razvan hrazvan Data 7 mai 2015 12:42:00
Problema Ratphu Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#define MAXCIF 18
#define MAXP 20
long long d[1 << MAXCIF][MAXP];
int nrcif = 0;
int mod[210];
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, vk = 0, nrk;
  for(i = 1; i < 210; i++){
    mod[i] = mod[i - 1] + 1;
    if(mod[i] == p)
      mod[i] = 0;
  }
  for(i = 0; i < (1 << nrcif); 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])][mod[j * 10 + cif[v[k]]]] += d[i][j];
        }
      }
    }
  }
  FILE *out = fopen("ratphu.out", "w");
  fprintf(out, "%lld", d[(1 << nrcif) - 1][0]);
  fclose(out);
  return 0;
}