2 条题解

  • 1
    @ 2025-10-6 14:11:45
    #include<stdio.h>
    #include<string.h>
    long long int a[20];
    void jiecheng(){//预处理1到12的阶乘然后存下
        a[0]=1;
        for(int i=1;i<=12;i++){
            a[i]=a[i-1]*i;
        }
    }
    int main()
    {
        int n,l;
        scanf("%d",&n);
        jiecheng();//预处理
        char m[20];
        while(n--){
            scanf("%s",m);
            l=strlen(m);
            long long int sum=0;
            for(int i=0;i<l;i++){
                int num=0;
                for(int j=i+1;j<l;j++){
                    if(m[j]<m[i]){
                        num++;
                    }
                }sum+=num*a[l-i-1];//康托展开,可以看看讨论里有详解
            }printf("%lld\n",sum+1);//康托展开从0名开始计数,题目从1开始
        }
        return 0;
    }
    

    信息

    ID
    174
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    (无)
    递交数
    234
    已通过
    117
    上传者