Cod sursa(job #559652)

Utilizator RengelBotocan Bogdan Rengel Data 17 martie 2011 22:54:53
Problema Submultimi Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<cstdio>
#include<cstring>
#include<algorithm>

int n,i,g,j;
char st[20];
char a[260][20];
int v[260];

void cpy(char a[20],char b[20]){
	
	int i=1;
	while(b[i]){
		a[i]=b[i];
		++i;
	}
	
}

void copy(){
	
	cpy(a[++g],st);
	
}

int valid(int k){
	
	int i;
	for(i=1;i<k;i++)
		if(st[i]==st[k]) return 0;
	return 1;
	
}

void back(int k,int q){
	
	int i;
	for(i=st[k-1]+1;i<=n;i++){
		st[k]=i;
		if(valid(k))
			if(k==q)
				copy();
			else back(k+1,q);
			
	}
	
}

bool f(int x,int y){
	if(strcmp(a[x]+1,a[y]+1)>0) return 0;
	return 1;
}

int main(){
	
	freopen("submultimi.in","r",stdin);
	freopen("submultimi.out","w",stdout);
	
	scanf("%d",&n);
	
	for(i=1;i<=n;i++)
		back(1,i);
	
	for(i=1;i<=g;i++)
		v[i]=i;
	
	std::sort(v+1,v+g+1,f);
	
	for(i=1;i<=g;i++){
		for(j=1;a[v[i]][j];j++)
			printf("%d ",a[v[i]][j]);
		printf("\n");
	}
	
	return 0;
	
}