Pagini recente » Cod sursa (job #3283189) | Cod sursa (job #3032584) | Cod sursa (job #83620) | Cod sursa (job #267434) | Cod sursa (job #109426)
Cod sursa(job #109426)
#include<fstream.h>
#define dim 1000
int n,k,t,v[dim][101],nk,st[101],nr[21];
unsigned long rr,max,a,vv[dim];
ifstream f("nkperm.in");
ofstream g("nkperm.out");
char w[dim];
void compar()
{rr++;
for(int i=0;i<t;i++)
{if(w[i])
{if(rr==vv[i])
for(int j=1;j<=nk;j++)v[i][j]=st[j];}
else if(!vv[i])
{int j=1;
while((j<=nk)&&(v[i][j]==st[j])) j++;
if(j>nk)
{vv[i]=rr;a--;}
}
}
}
void generare(int niv)
{if(niv>nk) compar();
else if(a||(rr<max))
{for(int i=1;i<=n;i++)
{if(nr[i])
if(st[niv-1]!=i)
{st[niv]=i;
nr[i]--;
generare(niv+1);
nr[i]++;
}
}
}
}
void afisare()
{int i;
for(i=0;i<t;i++)
if(w[i]) {for(int j=1;j<=nk;j++)
g<<v[i][j]<<" ";
g<<'\n';
}
else g<<vv[i]<<'\n';
}
int main()
{int i,j;
unsigned long jj;
char c;
f>>n>>k>>t;
nk=n*k;
for(i=0;i<t;i++)
{f>>c;
if(c=='A')
{a++;
for(j=1;j<=nk;j++)
f>>v[i][j];
}
else {f>>jj;
w[i]=1;
vv[i]=jj;
if(jj>max)max=jj;
}
}
for(i=1;i<=n;i++)nr[i]=k;
/*for(i=0;i<t;i++)
{g<<vv[i]<<" ";
for(j=1;j<=nk;j++)
g<<v[i][j]<<" ";
g<<'\n';
}*/
generare(1);
afisare();
f.close();
g.close();
return 0;
}