Pagini recente » Cod sursa (job #1992797) | Cod sursa (job #2126105) | Cod sursa (job #2257336) | Cod sursa (job #356163) | Cod sursa (job #109905)
Cod sursa(job #109905)
#include <stdio.h>
#include <string>
#define maxn 110
#define ll long long
int n,m;
int a[maxn],c[maxn];
ll f[maxn],sol,x;
int main()
{
freopen("nkperm.in","r",stdin);
freopen("nkperm.out","w",stdout);
int T,i,j;
char Q;
scanf("%d %d %d ",&n,&m,&T);
f[0]=1;
for (i=1;i<=n;i++) f[i]=1LL*f[i-1]*i;
while (T)
{
scanf("%c ",&Q);
if (Q=='A')
{
for (i=1;i<=n;i++) scanf("%d ",&a[i]);
sol=1;
for (i=1;i<=n;i++)
{
c[i]=0;
for (j=1;j<=i;j++)
if (a[i]>=a[j]) c[i]++;
}
for (i=1;i<=n;i++)
sol+=1LL*(a[i]-c[i])*f[n-i];
printf("%lld\n",sol);
}
else {
scanf("%lld ",&x);
x--;
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
for (i=1;i<=n;i++)
{
int aux=x/f[n-i]+1;
for (j=1;j<=n && a[i]<aux;j++)
if (c[j]==0) a[i]++;
a[i]=j-1;
x%=f[n-i];
c[a[i]]++;
}
for (i=1;i<=n;i++) printf("%d ",a[i]);
printf("\n");
}
T--;
}
return 0;
}