Cod sursa(job #3217308)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 22 martie 2024 11:01:56
Problema NKPerm Scor 20
Compilator cpp-64 Status done
Runda simulare_preoni_ig Marime 1.8 kb
#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;
}