Pagini recente » Cod sursa (job #2923805) | Cod sursa (job #548681) | Cod sursa (job #3127734) | Cod sursa (job #2927608) | Cod sursa (job #3217308)
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
using namespace std;
ifstream fin("nkperm.in");
ofstream fout("nkperm.out");
long long sol[300],fol[300],n,k,v[300],f[25],cnt,gasit,x,t,i,j;
char type;
void afisare()
{
for(int i=1;i<=n*k;i++)
fout<<sol[i]<<" ";
fout<<'\n';
}
void bkt(int poz)
{
if(poz==n*k+1)
{
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;
}
}
int main()
{
fin>>n>>k>>t;
if(k!=1)
fout<<1/0;
f[0]=1;
for(i=1;i<=n;i++)
f[i]=f[i-1]*i;
//bkt(1);
while(t--)
{
fin>>type;
if(type=='B')
{
fin>>x;
memset(fol,0,sizeof(fol));
for(i=1;i<=n;i++)
{
cnt=n-i;
for(j=1;j<=n;j++)
if(fol[j]==0)
{
if(x<=f[cnt])
break;
else
x=x-f[cnt];
}
fout<<j<<" ";
fol[j]=1;
}
fout<<'\n';
}
else
{
for(i=1;i<=n*k;i++)
fin>>v[i];
memset(fol,0,sizeof(fol));
long long ans=0;
for(i=1;i<=n*k;i++)
{
fol[v[i]]=1;
cnt=0;
for(int j=1;j<v[i];j++)
if(fol[j]==0)
cnt++;
ans=ans+(cnt)*f[n-i];
}
fout<<ans+1<<'\n';
}
}
return 0;
}