Cod sursa(job #2077417)

Utilizator sebi_andrei2008Lazar Eusebiu sebi_andrei2008 Data 28 noiembrie 2017 00:54:28
Problema Submultimi Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

vector<vector<int>> subMultimi;

bool myfunction (vector<int> v, vector<int> w) {
    vector<int>::iterator itV = v.begin();
    vector<int>::iterator itW = w.begin();
    
    while (itV != v.end() && itW != w.end()) {
        if ((*itV)<(*itW))
            return true;
        else if ((*itV)>(*itW))
            return false;
        itV++;
        itW++;
    }
    
    if (itV == v.end())
        return true;
    else
        return false;
}

void convertToBaseTwo(int x) {
    vector<int> temp;
    int poz = 1;
    while (x) {
        if (x & 1)
            temp.push_back(poz);
        
        x = x>>1;
        poz++;
    }
    
    subMultimi.push_back(temp);
}

int main() {
    int n;
    fin>>n;
    
    vector<int> zeroVector;
    subMultimi.push_back(zeroVector);
    
    int maxNumber = (1<<n);
    for (int i = 1; i < maxNumber; i++) {
        convertToBaseTwo(i);
    }
    
    sort(subMultimi.begin() + 1, subMultimi.end(), myfunction);
    
    for (int i = 1; i < maxNumber; i++) {
        vector<int>::iterator it;
        for (it = subMultimi[i].begin(); it != subMultimi[i].end(); it++)
            fout<<(*it)<<" ";
        fout<<"\n";
    }
    
    fin.close();
    fout.close();
    return 0;
}