Cod sursa(job #1319833)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 17 ianuarie 2015 13:56:49
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul II Marime 0.94 kb
#include<fstream>
#include<string>
using namespace std;
ifstream fi("ratphu.in");
ofstream fo("ratphu.out");

const int MAX_CONFIG = (1<<20)+5;
const int MAX_P = 20;

long long d[MAX_CONFIG][MAX_P]; // d[mask][r] - cate permutari formate din cifrele 
                                //              configuratiei mask dau restul r 
long long mask,nr_config;
int i,j,k,rest,p,n,c[MAX_P];
string s;

int main(){
    fi>>s>>p; n=s.length();
    for(i=0;i<n;++i) c[i]=s[i]-'0'; 
    
    d[0][0]=1;
    nr_config=(1<<n);
    for(mask=0; mask<nr_config; ++mask)
      for(j=0; j<n; ++j)
        if((mask&(1<<j))==0) 
          for(k=0; k<p; ++k)
            if(d[mask][k]!=0){
                              rest=(10*k+c[j])%p;
                              d[mask|(1<<j)][rest]+=d[mask][k];
                             }   
                            
    fo<<d[(1<<n)-1][0];
    
    fi.close();
    fo.close();
    return 0;
}