其他分享
首页 > 其他分享> > 2021-05-14

2021-05-14

作者:互联网

P2524 Uim的情人节礼物·其之弐

 

记录:康托展开(感觉和之前的拔树和耕犁问题差不多……)基本上是c++实现的代码想着就把c的传上来了。

 

题目描述

前传:详见洛谷P2525

Uim成功地按照顺序将礼物送到了N个妹子的手里并维持她们的和谐。

Uim现在想知道,他最终选择的顺序是所有给N个妹子送礼顺序中、字典序第几小的。

输入格式

第一行一个整数N,表示有N个数。

第二行一个整数X,表示给出的排列。

输出格式

一个整数,表示是第几小的字典序。

输入输出样例

输入 #1

3
231

输出 #1

4

说明/提示

1<=N<=9

输入的排列没有空格

#include<stdio.h>

void kangtuo(int n, int *a, int* b)
{
    int s[10]={0};
    for(int i=0; i<n; i++)
    {
        s[i]=1;
    }

    for(int i=n-1; i>=0; i--)
    {
        s[a[i]-1]=0;
        for(int j=a[i]-1; j>=0; j--)
        {
            b[i]+=s[j];
        }
    }
}
int main()
{
    int n,x;
    scanf("%d%d",&n,&x);

    int a[9]={0};
    int t=x;
    int b[10]={0};
    //逆序存放
    for(int i=0; i<n; i++)
    {
        a[i]=t%10;
        t/=10;
    }

    int ans=0;
    int xishu=1;
    kangtuo(n,a,b);
    
    for(int i=1; i<n; i++)
    {
        xishu*=i;
        ans+=b[i]*xishu;
    }

    printf("%d",ans+1);
    
    return 0;
}

 

标签:10,14,第几,05,int,Uim,整数,--,2021
来源: https://blog.csdn.net/DDL_8_00/article/details/116810212