Cod sursa(job #2094249)

Utilizator AkrielAkriel Akriel Data 25 decembrie 2017 14:00:43
Problema Combinari Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

int maxBits, usedBits;

ifstream fin("combinari.in");
ofstream fout("combinari.out");

template <class type>
void morphToGroup(type number, vector<int> &result){
    type bit = 1<<(int)(log2(number));
    for ( ;number or bit; bit>>=1 ){
        if ( number - bit >= 0 ){
            result.push_back(log2(bit)+1);
            number -= bit;
        }
    }
}

inline void solveProblem(){
    int startNumber = (1<<usedBits)-1;
    int stopNumber = (1<<maxBits);
    vector <int> group;
    vector <int> :: reverse_iterator element;

    for ( int index = startNumber; index <= stopNumber; index++ ){
        if ( __builtin_popcount(index) == usedBits ){
            group.clear();
            morphToGroup(index, group);

            for ( element = group.rbegin(); element < group.rend(); element++ )
                fout << *element << " ";
            fout << "\n";
        }
    }
}

int main(){
    fin >> maxBits >> usedBits;
    solveProblem();
}