Pagini recente » Cod sursa (job #2784571) | Cod sursa (job #3159708) | Cod sursa (job #3264597) | Cod sursa (job #2270088) | Cod sursa (job #3217284)
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
using namespace std;
ifstream fin("nkperm.in");
ofstream fout("nkperm.out");
int sol[300],fol[300],n,k,v[300],cnt,gasit,x,t,i;
char type;
void afisare()
{
for(int i=1;i<=n*k;i++)
fout<<sol[i]<<" ";
fout<<'\n';
}
void bkt(int poz)
{
if(cnt==x)
return;
if(poz==n*k+1)
{
cnt++;
if(cnt==x)
afisare();
return;
}
for(int i=1;i<=n;i++)
if(fol[i]<k && sol[poz-1]!=i)
{
fol[i]++;
sol[poz]=i;
bkt(poz+1);
fol[i]--;
sol[poz]=0;
if(cnt==x)
return;
}
}
void bkt2(int poz,int ok)
{
if(gasit==1)
return;
if(poz==n*k+1)
{
cnt++;
if(ok==1)
{
gasit=1;
fout<<cnt<<'\n';
}
return;
}
for(int i=1;i<=n;i++)
if(fol[i]<k && sol[poz-1]!=i)
{
fol[i]++;
sol[poz]=i;
if(ok==1 && sol[poz]!=v[poz])
bkt2(poz+1,0);
else
bkt2(poz+1,ok);
fol[i]--;
sol[poz]=0;
if(gasit==1)
return;
}
}
int main()
{
fin>>n>>k>>t;
while(t--)
{
fin>>type;
if(type=='B')
{
fin>>x;
cnt=0;
bkt(1);
}
else
{
for(i=1;i<=n*k;i++)
fin>>v[i];
cnt=0;
gasit=0;
bkt2(1,1);
}
}
return 0;
}