Pagini recente » Cod sursa (job #594449) | Cod sursa (job #654450) | Cod sursa (job #1279889) | Cod sursa (job #2130761) | Cod sursa (job #2445772)
#include <iostream>
#include <math.h>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
class Task {
public:
void solve() {
read_input();
print_output(get_result());
}
private:
int n;
std::vector<int> x;
void read_input() {
ifstream fin("submultimi.in");
fin >> n;
fin.close();
}
int Valid(int s){
x.resize(13);
for(int i = 1; i <= s-1; i++){
if(x[s] <= x[i]){
return 0;
}
}
return 1;
}
void Back(int s, std::vector<std::vector<int>>& all1, int k){
x.resize(13);
for(int i = 1; i <= n;i++){
x[s] = i;
if(Valid(s)){
if(s == k){
all1.push_back(x);
}else{
Back(s+1, all1, k);
}
}
}
}
void re(std::vector<std::vector<int>>& v, int k){
for(int i = 0; i < v.size(); i++){
v[i].erase(v[i].begin());
v[i].resize(k);
}
}
bool nr_poz(std::vector<int>& v, std::vector<int>& v1){
int ok = 0;
for(int i = 0; i < std::min(v.size(), v1.size()); i++){
if(v[i] > v1[i]){
ok = 1;
break;
}
}
if(ok == 1){
return true;
}
return false;
}
vector<vector<int> > get_result() {
vector<vector<int>> all;
vector<vector<int> > interm;
std::vector<int> poz;
/*
TODO: Construiti toate submultimile multimii {1, ..., N}.
Pentru a adauga o noua submultime:
vector<int> submultime;
all.push_back(submultime);
*/
for(int i = 1; i <= n; i++){
Back(1, interm, i);
re(interm, i);
for(int j = 0; j < interm.size(); j++){
all.push_back(interm[j]);
}
interm.clear();
}
for(int i = 0; i < all.size()-1; i++){
for(int j = 0; j < all.size()-i-1; j++){
if(nr_poz(all[j], all[j+1])){
std::vector<int> temp = all[j];
all[j] = all[j+1];
all[j+1] = temp;
}
}
}
return all;
}
void print_output(vector<vector<int> > result) {
ofstream fout("submultimi.out");
fout << result.size() + 1 << '\n';
for (int i = 0; i < (int)result.size(); i++) {
for (int j = 0; j < (int)result[i].size(); j++) {
fout << result[i][j] <<
(j + 1 != result[i].size() ? ' ' : '\n');
}
}
fout.close();
}
};
int main() {
Task task;
task.solve();
return 0;
}