【ACM】nyoj_139_我排第几个_201308062046
我排第几个
时间限制:1000 ms  |  内存限制:65535 KB 
难度:3
描述 
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
输入 
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; 
输出 
输出一个整数m,占一行,m表示排列是第几位; 
样例输入 
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia样例输出 
1
302715242
260726926
#include <stdio.h>
#include <string.h>
int JC(int n)
{
    int i,sum=1;
    for(i=1;i<=n;i++)
    sum*=i;
    return sum;
}
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        int a[15];
        char s[15];
        int i,j,k,t,len,sum,ss;
        scanf("%s",s);
        t=len=strlen(s);
        sum=ss=0;
        memset(a,0,sizeof(a));
        
        for(i=0;i<len;i++)
        {
            for(k=0,j=i+1;j<len;j++)
            {
                if(s[j]<s[i])
                k++;
            }
            a[--t]=k;
        }
        for(i=len-1;i>=0;i--)
        {
            ss=JC(i);
            sum+=a[i]*ss;
        }
        printf("%d\n",sum+1);
    }
    return 0;
}
组合数学之康拓展开:
公式描述:
把一个整数X展开成如下形式
X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,a为整数,并且0<=ai<i(1<=i<=n)。
应用:
求一个排列中在全排列中排第几:
例:
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个?
再举个例子: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是第三个大数。
【ACM】nyoj_139_我排第几个_201308062046的更多相关文章
- ACM -- 算法小结(二)错排公式的应用
		pala提出的问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放的位置.有几种摆法? 这个问题推广一下,就是错排问题: n个有序的元素应有n!种不同的排列.如若一个排列式的所有的元素都 ... 
- ACM学习历程—HDU2068 RPG的错排(组合数学)
		Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ... 
- ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))
		TsingHua OJ 上不能使用<algorithm>头文件,因此需要手写快排(刚开始写的时候自己就出了很多问题....),另外本题需要在给横坐标排序后,需要记录纵坐标的顺序对的数量,因 ... 
- SCNU ACM 2016新生赛初赛 解题报告
		新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ... 
- 关于ACM的总结
		看了不少大神的退役帖,今天终于要本弱装一波逼祭奠一下我关于ACM的回忆. 从大二上开始接触到大三下结束,接近两年的时间,对于大神们来说两年的确算不上时间,然而对于本弱来说就是大学的一半时光.大一的懵懂 ... 
- ACM失败之路
		校赛打完,已过四月,该是准备背起行囊,踏上考研之路了,自然,得先阔别一下ACM了,想起这几年ACM路,感慨颇多,不得不一诉心肠,与大家分享一下我的ACM历程,如果有人能从此文获取一些益处,那我就很欣慰 ... 
- hdu2068RPG的错排
		Problem Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R ... 
- 【转】ACM训练计划
		[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ... 
- 第六届acm省赛总结(退役贴)
		前言: 这是我的退役贴,之前发到了空间里,突然想到也要在博客里发一篇,虽然我很弱,但是要离开了还是有些感触,写出来和大家分享一下,希望不要见笑.回来看看,这里也好久没有更新了,这一年确实有些懈怠,解题 ... 
随机推荐
- constraint和index--转载
			primary key和unique约束是要依赖index的,下面通过试验来看看他们之间的依赖关系! SQL> select * from tt; ID NA --------- ... 
- B1295 [SCOI2009]最长距离 最短路
			就是一道最短路的裸题,直接跑spfa就行了.(spfa死了) 最后在答案处判断是否障碍物太多,然后就直接找最大值就行. (数据特别水,我错误算法60) 题干: Description windy有一块 ... 
- 通过JS制作一个简易数码时钟
			设计思路: 数码时钟即通过图片数字来显示当前时间,需要显示的图片的URL根据时间变化而变化. a.获取当前时间Date()并将当前时间信息转换为一个6位的字符串; b.根据时间字符串每个位置对应的数字 ... 
- Cent OS 6/7 中通过yum安装软件时提示cannot find a valid baseurl...的解决方法
			目录 1 问题描述 2 解决方法一 (Cent OS 7中有效) 3 解决方法二 (Cent OS 7中无效) 1 问题描述 新申请了虚拟机, 系统版本是Cent OS 7.2. 在安装软件的过程中, ... 
- 1.java安全框架SHIRO
			1. shiro介绍 Apache Shiro是一个强大且易用的java安全框架,执行身份验证.授权.密码和会话管理. 使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移 ... 
- 【JAVA练习】- 接收三个班各四个学员的成绩,算平均分
			package class_average; import java.util.Scanner;//调用Scanner类 public class average { public static vo ... 
- Android 使用SQLite存储以及读取Drawable对象
			在进行Android开发过程中,我们经常会接触到Drawable对象,那么,若要使用数据库来进行存储及读取,该如何实现? 一.存储 //第一步,将Drawable对象转化为Bitmap对象 Bitma ... 
- PDO获取数据乱码的解决方法
			确保PHP文件编码格式为UTF8 确保数据字段格式为UTF8 PDO中设置编码格式,有如下三种方式: 方式1: 写在初始化dsn中 define( 'DB_DSN', 'mysql:host=loca ... 
- android AIDL示例代码(mark下)
			1.demo结构图 2.ipcclient Book类. package com.mu.guoxw.ipcclient; import android.os.Parcel; import androi ... 
- MSP430之software development flow
			MSP430 software development flow. 1) The shaded portion highlights the most common development path; ... 
