Cod sursa(job #1993246)

Utilizator DjokValeriu Motroi Djok Data 22 iunie 2017 16:26:05
Problema Ratphu Scor 70
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul II Marime 0.69 kb
#include <bits/stdc++.h>
using namespace std;

int i, mask, n, p, rest, now;
long long dp[1 << 18][20];
string dig;

int main() {
  ifstream cin("ratphu.in");
  ofstream cout("ratphu.out");
  ios_base::sync_with_stdio(0);

  cin >> dig >> p; n = dig.size();
  for(i = 0; i < n; ++i) dig[i] -= '0';

  dp[0][0] = 1;

  for(mask = 0; mask < (1 << n) - 1; ++mask) {
    for(rest = 0; rest < p; ++rest) {
      if(!dp[mask][rest]) continue;

      for(i = 0; i < n; ++i) {
        if(mask & (1 << i)) continue;
        now = (rest * 10 + dig[i]) % p;
        dp[mask | (1 << i)][now] += dp[mask][rest];
      }
    }
  }

  cout << dp[(1 << n) - 1][0] << '\n';

  return 0;
}