Pagini recente » Cod sursa (job #3289511) | Cod sursa (job #765035) | Cod sursa (job #765065) | Cod sursa (job #109978) | Cod sursa (job #109360)
Cod sursa(job #109360)
#include<stdio.h>
#include<string.h>
#define N 101
int n,k,t,a[N],b,nr,st[N],use[N],ok,nro,v[N];
char c;
int iscorect()
{
int i;
if(c=='A')
for(i=1;i<=n*k;i++)
if(st[i]!=v[i])
return 0;
if(c=='B'&&nr!=nro)
return 0;
return 1;
}
int valid(int kb)
{
if(st[kb]==st[kb-1])
return 0;
return 1;
}
void back(int kb)
{
int i;
if(ok&&kb>n*k)
{
nr++;
if(iscorect())
ok=0;
}
else
for(i=1;i<=n&&ok;i++)
if(use[i]<2&&ok)
{
st[kb]=i;
use[i]++;
if(ok&&valid(kb))
back(kb+1);
use[i]--;
}
}
void solve()
{
int i;
if(c=='A')
for(i=1;i<=n*k;i++)
scanf("%d",&v[i]);
if(c=='B')
scanf("%d",&nro);
ok=1;
nr=0;
memset(use,0,sizeof(use));
back(1);
if(c=='A')
printf("%d\n",nr);
else
{
for(i=1;i<n*k;i++)
printf("%d ",st[i]);
printf("%d\n",st[i]);
}
}
void read()
{
int i;
scanf("%d%d%d%c",&n,&k,&t,&c);
for(i=1;i<=t;i++)
{
scanf("%c",&c);
solve();
scanf("%c",&c);
}
}
int main()
{
freopen("nkperm.in","r",stdin);
freopen("nkperm.out","w",stdout);
read();
return 0;
}