Pagini recente » Cod sursa (job #1351889) | Cod sursa (job #2720258) | Cod sursa (job #2950265) | Cod sursa (job #1574774) | Cod sursa (job #109864)
Cod sursa(job #109864)
#include <cstdio>
#include <cstring>
#define Nmax 32
#define ll long long
int n, k, t;
int sir[Nmax];
ll p[Nmax];
int v[Nmax];
void citire()
{
scanf("%d %d %d", &n, &k, &t);
}
void solve()
{
int i, j, ct, k;
ll val;
char tip;
p[0] = 1;
for (i = 1; i <= n; ++i)
p[i] = p[i - 1] * i;
p[0] = 0;
while (t)
{
scanf(" %c", &tip);
if (tip == 'A')
{
memset(v, 0, sizeof(v));
for (i = 1; i <= n; ++i)
scanf("%d", &sir[i]);
val = 0;
for (i = 1; i <= n; ++i)
{
ct = 0;
for (j = 1; j < sir[i]; ++j)
if (!v[j])
++ct;
v[sir[i]] = 1;
val += ct * p[n - i];
}
printf("%lld\n", val + 1);
}
else
{
memset(v, 0, sizeof(v));
scanf("%lld\n", &val);
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n - i + 1; ++j)
if (j * p[n - i] >= val) break;
val -= (j - 1) * p[n - i];
if (i == n) j = 1;
ct = 0;
for (k = 1; k <= n; ++k)
if (!v[k])
{
++ct;
if (ct == j)
break;
}
v[k] = 1;
printf("%d ", k);
}
printf("\n");
}
--t;
}
}
int main()
{
freopen("nkperm.in", "r", stdin);
freopen("nkperm.out", "w", stdout);
citire();
if (k == 1) solve();
return 0;
}