Cod sursa(job #743677)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 5 mai 2012 14:34:14
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb

#include <fstream>

int main (void)
{
    unsigned short n;
    std::ifstream input("permutari.in");
    input >> n;
    input.close();
    char *set(new char [n]);
    unsigned char *perm(new unsigned char [n]), *generator(perm), *limit(perm + n);
    {
        unsigned char counter(0);
        char s('1'), *it(set);
        do
        {
            *generator = counter;
            *it = s;
            ++it;
            ++generator;
            ++counter;
            ++s;
        }
        while (generator < limit);
    }
    unsigned char *it, *start(limit - 2), *end(limit - 1);
    std::ofstream output("permutari.out");
    while (true)
    {
        generator = perm;
        do
        {
            output.put(set[*generator]);
            output.put(' ');
            ++generator;
        }
        while (generator < limit);
        output.put('\n');
        generator = start;
        while (generator >= perm && *generator > generator[1])
            --generator;
        if (generator < perm)
            break;
        it = end;
        while (*it < *generator)
            --it;
        *generator ^= *it;
        *it ^= *generator;
        *generator ^= *it;
        it = end;
        ++generator;
        while (generator < it)
        {
            *generator ^= *it;
            *it ^= *generator;
            *generator ^= *it;
            ++generator;
            --it;
        }
    }
    output.close();
    delete [ ] set;
    delete [ ] perm;
    return 0;
}