Pagini recente » Cod sursa (job #348835) | Cod sursa (job #2213908) | Cod sursa (job #1128119) | Cod sursa (job #3252395) | Cod sursa (job #1806267)
#include <fstream>
using namespace std;
ifstream f("ratphu.in");
ofstream g("ratphu.out");
char nr[22];
int p,lg;
long long d[1<<18][21];///d[i][r] nr de solutii cu restul r al configuratiei i
int rest[222];
int main()
{
f>>nr>>p;
for(lg=0;nr[lg];lg++) nr[lg]-=48;
for (int i=1;i<=p*10+9; ++i) rest[i] = i%p;
d[0][0] = 1;
for(int i=0;i< (1<<lg);++i)///pentru toate cele 2^n configuratii
for(int r=0;r<p;++r)///pentru fiecare rest de la 0 la p-1
if (d[i][r])
for (int j=0;j<lg;++j) ///pentru fiecare cifra a numarului
if ( ((i >>j)&1) == 0) ///daca nu se afla 2 numere pe aceasi pozitie
{
int NewNr = i | (1 << j);///formez noua configuratie
int NewR=r*10+nr[j]; ///adaug cifra la sfarsit si fac noul rest
d[NewNr][rest[NewR]] += d[i][r];
}
g<<d[(1<<lg)-1][0];
}