Cod sursa(job #2023716)

Utilizator darkraven13Stefan Bereghici darkraven13 Data 19 septembrie 2017 13:37:29
Problema Submultimi Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <vector>
#include <cmath>
using namespace std;
#define pb push_back
typedef vector < vector <int> > vector2d;

class SubsetsGenerator {
private :
    static int getBitPos(int n){
        int bitPos;
        for (bitPos = 0; (1 << bitPos) < n; ++bitPos);
        return bitPos;
    }

public :
    static vector2d getSubsets(int n){
        vector2d subsets;
        for (int bitMask = 1; bitMask < (1<<n); ++bitMask){
            vector <int> newSubset;
            for (int floatBit = 1; floatBit <= bitMask; floatBit <<= 1){
                if (floatBit & bitMask){
                    newSubset.pb(getBitPos(floatBit) + 1);
                }
            }
            subsets.pb(newSubset);
        }
        return subsets;
    }
};

int main(){
    FILE *in = fopen("submultimi.in", "r");
    FILE *out = fopen("submultimi.out", "w");
    int n;

    fscanf(in, "%d", &n);
    vector2d subsets = SubsetsGenerator::getSubsets(n);
    for (auto& subset : subsets){
        for (auto& i : subset){
            fprintf(out, "%d ",i);
        }
        fprintf(out, "\n");
    }
    return 0;
}