Cod sursa(job #2330188)

Utilizator igsifvevc avb igsi Data 28 ianuarie 2019 00:24:40
Problema Generare de permutari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <algorithm>
#include <fstream>
#include <iterator>
#include <vector>

bool next_perm(std::vector<int>& p) {
    if (p.size() < 2)
        return false;
    
    auto it = p.end() - 1;

    while (it != p.begin() && *(it-1) > *it)
        --it;

    if (it == p.begin())
        return false;
    
    std::reverse(it, p.end());
    auto next = std::lower_bound(it, p.end(), *(it-1));

    std::iter_swap(it-1, next);

    return true;
}

int main() {
    std::ifstream fin("permutari.in");
    std::ofstream fout("permutari.out");

    int n;
    fin >> n;
    
    std::vector<int> p(n, 0);
    std::generate( p.begin(), p.end(), [] () {static int n = 1; return n++;} );

    do {
        std::copy(p.begin(), p.end(), std::ostream_iterator<int>(fout, " "));
        fout << '\n';
    } while (next_perm(p));

    return 0;
}