Cod sursa(job #465860)

Utilizator SheepBOYFelix Liviu SheepBOY Data 25 iunie 2010 13:38:13
Problema Ratphu Scor 0
Compilator c Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.28 kb
#include<stdio.h>
long long n,sol,psw[19];
int p,nc,prm[19],cif[19];

inline void OpenGate()
{
    freopen("ratphu.in","r",stdin);
    freopen("ratphu.out","w",stdout);
}

inline void ReadInput()
{
    scanf("%lld%d",&n,&p);
}

inline void DecompInput()
{
    nc=1;
    while(n)
    {
        cif[nc++]=n%10;
        n/=10;
    }
    --nc;
}

void ExtractCompare(int *vect)
{
    long long val=0;
    int i;
    for(i=nc;i>0;--i)
        val=val*10+cif[vect[i]];
    printf("eval %lld ",val);
    if(!(val%p))
    {
    // printf("add\n");
        sol++;
    }
    else;
    //printf("\n");
}

void GeneratePerms()
{
    int i;
    for(i=1;i<=nc;++i)
        prm[i]=i;

    int aux;
    i=1;
    psw[i]=0;

    while(psw[nc-1]!=nc-1)
    {
      //  printf("i:%d psw[i]:%lld\n",i,psw[i]);

        aux=prm[i];
        prm[i]=prm[i+1];
        prm[i+1]=aux;
        psw[i]++;
        ExtractCompare(prm);

        if(psw[i]>=i)
        {
            //reverse
            if(i!=nc-1)
                psw[i]=0;
            ++i;
        }
        else
        {
            i=1;
        }

    }

}

int main()
{
    OpenGate();
    ReadInput();
    DecompInput();
    GeneratePerms();
    printf("%lld",sol);
    return 0;
}