Cod sursa(job #858079)

Utilizator asstasticAsstastic asstastic Data 18 ianuarie 2013 15:03:12
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<iostream>
#include<fstream>

using namespace std;

int n, st[100], v[100], bun, l, u, tot, ver[100]={0};


void init(int k){
	st[k]=0;
}

int succesor(int k){
	if(st[k]<n){
		st[k]+=1;
		return 1;
	}
	return 0;
}

int valid(int k){
	int i, j, ok1;
	ok1=1;
	bun=0;
	/*for(i=1; i<=k; i++)
		for(j=i+1; j<=k; j++)
			if(v[st[i]]!=v[st[j]]) bun++;*/
	for(i=1; i<=k; i++)
		if(ver[v[st[i]]]!=1){
			bun++;
			ver[v[st[i]]]=1;
		}
	ver[v[st[k]]]=0;
	for(i=1; i<k; i++){
		ver[v[st[i]]]=0;
		if((st[i]>=st[k])||(st[i+1]!=st[i]+1)) ok1=0;;
	}
	if(!ok1) return 0;
	return 1;
}

int solutie(int k){
	return (k<=n)&&(bun>=l)&&(bun<=u);
}

void tipar(int k){
	tot++;
}


void bk(int k){
	init(k);
	while(succesor(k))
		if(valid(k)){
			if(solutie(k))
				tipar(k);
				bk(k+1);
		}
}

int main(){
	int i;
	ifstream f("secv5.in");
	ofstream g("secv5.out");
	tot=0;
	f>>n>>l>>u;
	for(i=1; i<=n; i++) f>>v[i];
	bk(1);
	g<<tot;
	return 0;
	
}