Cod sursa(job #466451)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 26 iunie 2010 17:34:06
Problema Permutari2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <stdio.h>
#include <vector>
using namespace std;

#define MOD 10007

int st[800];
int n, i, j, k;
int K, AS;
long int permutari;

void init ()
{
    st[k] = 0;
}

int Am_Succesor ()
{
    if (st[k] < n)
    {
        st[k] ++;
        return 1;
    }
    return 0;
}

int E_Valid ()
{
    for (i=1; i<k; ++i)
        if (st[i] == st[k])
            return 0;
    return 1;
}

void back ()
{
    k = 1;
    init ();
    while (k > 0)
    {
        do
        { }
        while ( (AS = Am_Succesor()) && !E_Valid());
        if (AS)
            if (k == n)
            {
                /*for (i=1; i<=k; ++i)
                    printf ("%d", st[i]);*/
                int gasit = 0;

                for (i=1; i<=K; ++i)
                    if (st[i] > K)
                    {
                        gasit = 1;
                        break;
                    }
                if (!gasit)
                {
                    permutari ++;
                    /*for (i=1; i<=k; ++i)
                        printf ("%d", st[i]);*/
                }

                //printf ("\n");
            }
            else
            {
                k ++;
                init ();
            }
        else
            k --;

    }
}

int main ()
{
    FILE *f = fopen ("permutari2.in","r");
    FILE *g = fopen ("permutari2.out","w");
    fscanf (f,"%d %d", &n, &K);

    back();
    //printf ("permutari = %ld", permutari % MOD);
    fprintf (g,"%ld", permutari % MOD);

    fclose(g);
    fclose(f);
    return 0;
}