Cod sursa(job #109969)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 25 noiembrie 2007 14:58:23
Problema NKPerm Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <cstring>

long st[100];
long nr[100];
long rasp[14000][100];
long h,n,k,T;

void back(long i) {
	if ( i==n*k ) {
		for (long j=1; j<=n; ++j)
			if ( nr[j]!=k )
				return;
		memcpy(rasp[h++], st, sizeof(long)*n*k);
		return ;
	}
	for (st[i]=1; st[i]<=n; ++st[i])
		if ( st[i]!=st[i-1]  )  {
			nr[st[i]]++;
			back(i+1);
			nr[st[i]]--;
		}
}


int main() {
	freopen("nkperm.in", "r", stdin);
	freopen("nkperm.out","w", stdout);

	scanf("%ld %ld %ld\n", &n, &k, &T);
	
	back(0);
	while ( T-- ) {
		char c;
		scanf("%c", &c);
		if ( c=='B' ) {
			long x;
			scanf("%ld\n", &x);
			--x;
			printf("%ld", rasp[x][0]);
			for (long i=1; i<n*k; ++i)
				printf(" %ld",rasp[x][i]);
			printf("\n");
		} else {
			long test[100];
			for (long i=0; i<n*k; ++i)
				scanf("%ld", test+i);
			scanf("\n");
			for (long i=0; i<h; ++i) {
				long ok=1;
				for (long j=0; ok && j<n*k; ++j)
					if ( rasp[i][j]!=test[j] ) 
						ok = 0;
				if ( ok ) {
					printf("%ld\n", i+1);
					i=h;
				}
			}
		}
	}
	fclose(stdout);
	fclose(stdin);

	return 0;
}