Cod sursa(job #1677900)

Utilizator ciprian.costeaCostea Ciprian Marian ciprian.costea Data 6 aprilie 2016 21:11:02
Problema Combinari Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

std::ofstream out("combinari.out");

void generateOneByOne(std::vector<int> &vec, int aux[], int start,
        int end, int index, int k)
{
    // are dimensiunea ceruta => afisam combinarea
    if(index == k)
    {
        for(int i = 0; i < k; i++)
        {
            out << aux[i] << " ";
        }
        out << "\n";
    }

    int i = start;
    while(i <= end && end - i + 1 >= k - index)
    {
        aux[index] = vec[i];
        generateOneByOne(vec, aux, i + 1, end, index + 1, k);

        // eliminam duplicatele
        while(vec[i] == vec[i + 1])
        {
            i++;
        }
        i++;
    }
}

void generateCombinations(vector<int> &vec, int dim, int k)
{
    int aux[k];
    std::sort(vec.begin(), vec.end());
    generateOneByOne(vec, aux, 0, dim - 1, 0, k);
}

int main()
{
    std::ifstream fin("combinari.in");

    int n, k;
    fin >> n;
    fin >> k;
    vector<int> vec;

    for(int i = 1 ; i < n + 1; i++)
    {
        vec.push_back(i);
    }

    generateCombinations(vec, n, k);
    
    fin.close(); out.close();
    return 0;
}