Cod sursa(job #1794284)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 1 noiembrie 2016 09:49:05
Problema Ratphu Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <queue>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string.h>

using namespace std;

int cif[25];
int dp[1<<21][25];

int main(){
    freopen("ratphu.in", "r", stdin);
    freopen("ratphu.out", "w", stdout);
    int n,i,c,limit,j,k,l;
    scanf("%d %d", &n, &k);
    c = 0;
    while(n){
        cif[c++] = n%10;
        n /= 10;
    }
    limit = 1<<c;
    for(i = 0;i < c;i++){
        dp[1<<i][cif[i]%k]++;
    }
    for(i = 1;i < limit;i++){
        for(l = 0;l < k;l++){
            if(dp[i][l]){
                for(j = 0;j < c;j++){
                    if((i&(1<<j)) == 0){
                        dp[i|(1<<j)][(l*10+cif[j])%k] += dp[i][l];
                    }
                }
            }
        }
    }
    printf("%d", dp[limit-1][0]);
    return 0;
}