`

南阳理工OJ 139 我排第几个(康托展开)求第几小问题

 
阅读更多

连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=139

 

我排第几个

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?

 
输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
输出一个整数m,占一行,m表示排列是第几位;
样例输入
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia
样例输出
1
302715242
260726926

 

如我想知道321是{1,2,3}中第几个大的数可以这样考虑 :
第一位是3,当第一位的数小于3时,那排列数小于321 如 123、 213 ,小于3的数有1、2 。所以有2*2!个。再看小于第二位2的:小于2的数只有一个就是1 ,所以有1*1!=1 所以小于321的{1,2,3}排列数有2*2!+1*1!=5个。所以321是第6个大的数。 2*2!+1*1!+0*0!就是康托展开。
再举个例子:1324是{1,2,3,4}排列数中第几个大的数:第一位是1小于1的数没有,是0个 0*3! 第二位是3小于3的数有1和2,但1已经在第一位了,所以只有一个数2 1*2! 。第三位是2小于2的数是1,但1在第一位,所以有0个数 0*1! ,所以比1324小的排列有0*3!+1*2!+0*1!=2个,1324是第三个大数。

 

#include<stdio.h>
#include<string.h>
int p[12],num[13];//p[i]存放i的阶乘  num[i]存放第i个字符比后面字符大的个数
int main()
{
    //   freopen("in.txt","r",stdin);
       int i,j,k;
       p[0]=1;
       for(i=1,j=1;i<12;i++)
       {
              j*=i;
              p[i]=j;
       }
       int n,sum;
       scanf("%d",&n);
       char str[13];
       for(i=0;i<n;i++)
       {
              memset(num,0,sizeof(num));
              scanf("%s",str);
           //   printf("***%s***\n",str);
              for(j=0;j<12;j++)
                     for(k=j+1;k<12;k++)
                            if(str[j]>str[k])num[j]++;
     //         for(j=0;j<13;j++)printf("%d ",num[j]);
        //      printf("\n");
              for(j=0,sum=0;j<12;j++)
                     sum+=num[j]*p[11-j];
              printf("%d\n",sum+1);
       }
       return 0;
}

 

 

 

 

 

分享到:
评论

相关推荐

    南阳理工oj离线题库

    南阳理工oj就是这样一个平台,专为南阳理工学院的学生和编程爱好者设计,提供了丰富的编程题目供他们挑战和提升自己的能力。 离线题库的组成部分可能包括以下几点: 1. 题目描述:每个题目都有详细的描述,包括...

    南阳理工学院OJ第1版解题报告V1.0.pdf

    ### 南阳理工学院OJ第1版解题报告概览 #### 1. A+B Problem 虽然解题思路在报告中被省略,但我们可以推测这是一个基础的数学加法问题,涉及到数字输入与基本算术操作。此类题目旨在测试初学者对编程语言基本输入...

    南阳理工学院OJ_个人AC代码包(Java提交)

    【南阳理工学院OJ_个人AC代码包(Java提交)】是针对Java初学者的一份宝贵资源,它包含了参与ACM国际大学生程序设计竞赛(ICPC)时在南阳理工学院在线评测系统(OJ)上获得正确答案的代码实例。这些代码展示了如何用...

    南阳理工oj stl练习ac代码

    南阳理工学院的OJ(Online Judge)平台为学生提供了丰富的STL练习题目,通过AC(Accepted,表示代码正确通过所有测试用例)的代码,我们可以学习到STL在实际问题解决中的应用。 1. 容器: STL包含多种容器,如...

    湖南理工oj题解(学习用)-共230道题

    【标题】:“湖南理工oj题解(学习用)-共230道题”揭示了这是一个针对湖南理工大学在线编程竞赛平台(Online Judge,简称OJ)的题解集合,包含了230个不同题目。这类资源通常由参赛者或者经验丰富的程序员整理,...

    哈理工oj 1084百步穿杨

    哈理工OJ1084答案哈理工OJ1084答案哈理工OJ1084答案哈理工OJ1084答案哈理工OJ1084答案

    oj刷题 西安理工大学学生在线实验系统编程题答案(超级详细)

    这个“oj刷题”压缩包文件很可能是包含了西安理工大学在线实验系统中的一些典型题目,包括但不限于排序算法(如冒泡排序、快速排序、归并排序)、搜索算法(如二分查找、深度优先搜索、广度优先搜索)、图论问题(如...

    湖南理工学院OJ-小鱼比可爱

    湖南理工学院小鱼比可爱OJ题

    基于Laravel 5.0的OJ题解网站 , 目前涵盖安科OJ,南阳OJ,杭电OJ ,北大OJ,浙大OJ.zip

    【描述】中提到的“目前涵盖安科OJ,南阳OJ,杭电OJ,北大OJ,浙大OJ”意味着这个题解网站已经集成了多个知名OJ平台的题目,用户可以在一个统一的平台上找到这些不同OJ的题目并查看解决方案。安科OJ、南阳OJ、杭电OJ...

    山东理工大学2016级OJ题目1833

    山东理工大学2016级OJ题目...本篇文章总结了山东理工大学2016级OJ题目1833所涉及到的知识点,包括最值问题、整数位问题、小鑫数数儿问题和卡片游戏问题。这些问题涉及到C语言编程、算法设计和数据结构等方面的知识。

    用python开发的本地OJ练习系统(附几道练习题)

    6. **练习题库**:附带的几道练习题是这个OJ系统的核心,它们涵盖了不同难度和主题,旨在帮助用户提升编程技能和解决问题的能力。 【标签】: "PYTHON C++ oj系统" 这些标签表明了系统的主要技术栈和适用人群。...

    山东理工大学2016级OJ题1832

    例如在第一个和第二个程序中,都使用了 `sqrt` 函数来计算数列的项。 3. **循环结构**:在计算数列和的程序中,使用了 `for` 循环结构来迭代计算每一项的值,直到达到指定的项数 `m`。 4. **函数定义与调用**:每...

    趣味题:柱状图排序 西安理工大学学生在线实验系统 oj

    趣味题:柱状图排序 西安理工大学学生在线实验系统 oj

    OJ平台hustoj

    OJ通常包含以下几个关键部分: 1. 用户管理:注册、登录、权限设置等功能,让不同级别的用户可以参与不同的题目和活动。 2. 题目库:存储各种编程题目,包括题目描述、输入输出示例、测试数据等。 3. 提交系统:...

    竞赛题集南阳OJ部分习题及解答其他oj试题及解答

    竞赛题集南阳OJ部分习题及解答其他oj试题及解答提取方式是百度网盘分享地址

    oj5_oj1.5的第一题_swustoj_httpwww.24oj.com_furzop_

    标题中的"oj5_oj1.5的第一题_swustoj_httpwww.24oj.com_furzop"可能是指一个在线编程挑战平台上的问题,这个挑战来自西南科技大学的oj(Online Judge)系统,版本为oj1.5。"SWUSTOJ"很可能是"Southwest University ...

    oj题.zip

    这些文件名看起来是编程题目,很可能来源于在线编程竞赛(Online Judge,简称OJ)平台,如LeetCode、Codeforces或HackerRank等。每个.py文件可能代表一个独立的编程问题解决方案,采用Python语言编写。接下来,我们...

    OJ系统题目:数组求能量.docx

    这篇文档中的代码是一个Java程序,用于解决在线判题(Online Judge,简称OJ)系统中的一个数组能量计算问题。从代码中我们可以提炼出以下几个关键的知识点: 1. **基础语法**:这段代码展示了Java的基本语法结构,...

    离线本地oj练习系统

    离线本地oj(Online Judge)练习系统是一种专为编程初学者设计的自我学习...总的来说,离线本地oj练习系统为编程初学者提供了一个便捷、高效的学习平台,通过反复实践和自我挑战,可以迅速提升编程技能和问题解决能力。

    山东理工大学2016级OJ题目1834

    山东理工大学2016级OJ题目1834 本题目总共包含五个小题目,每个小题目都涉及到矩阵运算,一共有矩阵转置、杨辉三角、对称矩阵的判定、求一个 3*3 矩阵对角线元素之和、矩阵的旋转五个小题目。 1.矩阵转置 矩阵...

Global site tag (gtag.js) - Google Analytics