Cod sursa(job #2227069)

Utilizator inquisitorAnders inquisitor Data 31 iulie 2018 09:17:40
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#pragma optimize GCC("O1")

__attribute__((always_inline)) bool next_permutation(char v[], char N)
{
    char i = N - 1;

    while(i && v[i - 1] > v[i]) --i;

    if(i == 0) return false;

    char j = N - 1;

    while(v[j] < v[i - 1]) --j;

    v[i - 1] = v[i - 1] ^ v[j] ^ (v[j] = v[i - 1]);

    for(j = N - 1; i < j; ++i, --j)
    {
        v[i] = v[i] ^ v[j] ^ (v[j] = v[i]);
    }

    return true;
}

int main()
{
    freopen("permutari.in", "r", stdin);
    freopen("permutari.out", "w", stdout);

    char permutation[] = {49, 50, 51, 52, 53, 54, 55, 56}, buffer[685445];

    int N, index = -1;

    scanf("%d", &N);

    do
    {
        for(int i = 0; i < N; ++i)
        {
            buffer[++index] = permutation[i];

            buffer[++index] = ' ';
        }

        buffer[++index] = '\n';

    }while(next_permutation(permutation, N));

    buffer[index] = '\0';

    puts(buffer);

    return 0;
}