Cod sursa(job #1582731)

Utilizator PaulHerHerman Paul PaulHer Data 28 ianuarie 2016 13:09:07
Problema Farfurii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("farfurii.in");
ofstream fout("farfurii.out");
int st[100001],n,y,k,ct=0;
void init()
{
    st[k]=0;
}
int succesor()
{
    if (st[k]<n)
    {
        st[k]++;
        return 1;
    }
    return 0;
}
int valid ()
{
    for (int i=1; i<k; i++)
    {
        if (st[i]==st[k])
            return 0;
    }
    return 1;
}
int sol()
{
    if (k==n)
    {
        ct=0;
        for (int i=1; i<=n; i++)
        {
            for (int j=i+1; j<=n; j++)
            {
                if (st[i]>st[j])
                {
                    ct++;
                    if (ct>y)
                        return 0;
                }
            }
        }
        if (ct==y)
        {
            return 1;
        }
        else
            return 0;
    }
    return 0;
}
void tipar()
{
    for (int i=1; i<=n; i++)
    {
        fout<<st[i]<<" ";
    }
}
int bkt()
{
    int as;
    k=1;
    init();
    while (k>0)
    {
        do {}
        while ((as=succesor())&& !valid());
        {
            if (as)
            {
                if (sol())
                {
                    tipar();
                    return 0;
                }
                else
                {
                    k++;
                    init();
                }
            }
            else
            {
                k--;
            }
        }
    }
}
int main ()
{
    fin>>n>>y;
    bkt();
    if (y==0)
    {
        for (int i=1; i<=n; i++)
        {
            fout<<st[i];
        }
    }
}