Cod sursa(job #109478)

Utilizator rethosPaicu Alexandru rethos Data 25 noiembrie 2007 11:17:58
Problema NKPerm Scor 10
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 11-12 Marime 1.03 kb
#include <fstream.h>
#define NMAX 20000
ofstream g("nkperm.out");
int a[NMAX][101],n,ka,ind=1,v[101];
int comp(int x[],int y[])
{ int i;
  for (i=1;i<=n*ka;i++)
	if (x[i]!=y[i]) return 0;
  return 1;
}
void afisare(int x)
{ int i;
  for (i=1;i<=n*ka;i++)
	g<<a[x][i]<<' ';
  g<<'\n';
}
int verif(int k)
{ int nr=0,i;
  if (k==1) return 1;
  if (v[k]==v[k-1]) return 0;
  for (i=1;i<=k;i++)
	if (v[i]==v[k]) nr++;
  if (nr>ka) return 0;
  return 1;
}
void back(int k)
{ int i;
  if (k>n*ka) { for (i=1;i<=ka*n;i++) a[ind][i]=v[i];
	     ind++;
	     return;
	   }
  for (i=1;i<=n;i++)
	{ v[k]=i;
	  if (verif(k))
		back(k+1);
	}
}
int main()
{ int t,i,d[101],sw,j,k;
  long long y;
  char x;
  ifstream f("nkperm.in");
  f>>n>>ka>>t;
  back(1);
  for(k=1;k<=t;k++)
	{ f>>x;
	  if (x=='A')
		{ for (j=1;j<=n*ka;j++)
			f>>d[j];
		  sw=0;
		  i=0;
		  while (sw==0)
			{ i++;
			  if (comp(d,a[i])) sw=1;
			}
		  g<<i<<'\n';
		}
	  if (x=='B')
		{ f>>y;
		  afisare(y);
		}
	}


  return 0;
}