【洛谷 P8620】[蓝桥杯 2014 国 A] 排列序数 题解(字符串+排序+全排列)

2024-04-20 05:36

本文主要是介绍【洛谷 P8620】[蓝桥杯 2014 国 A] 排列序数 题解(字符串+排序+全排列),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[蓝桥杯 2014 国 A] 排列序数

题目描述

如果用 a b c d 这 4 4 4 个字母组成一个串,有 4 ! = 24 4!=24 4!=24 种,如果把它们排个序,每个串都对应一个序号:

  abcd  0abdc  1acbd  2acdb  3adbc  4adcb  5bacd  6badc  7bcad  8bcda  9bdac  10bdca  11cabd  12cadb  13cbad  14cbda  15cdab  16cdba  17...

现在有不多于10个两两不同的小写字母,给出它们组成的串,你能求出该串在所有排列中的序号吗?

输入格式

一行,一个串。

输出格式

一行,一个整数,表示该串在其字母所有排列生成的串中的序号。注意:最小的序号是 0 0 0

样例 #1

样例输入 #1

bdca

样例输出 #1

11

样例 #2

样例输入 #2

cedab

样例输出 #2

70

提示

时限 1 秒, 256M。蓝桥杯 2014 年第五届国赛


思路

首先从输入中读取一个字符串 s,并将其拷贝到 ss。然后对 ss 进行排序,得到了 ss 的字典序最小排列。

接下来,进行一个 do-while 循环,每次循环中,都会对 ss 进行一次字典序的下一个排列操作,同时如果 sss 相等,就跳出循环。每进行一次排列操作,都会使计数器 ans 增加 1 1 1,这样就可以得到 s 在所有排列中的序号。

最后,输出 ans,即 s 在所有排列中的序号。


AC代码

#include <algorithm>
#include <cmath>
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;int n;
string s, ss;
ll ans = 0;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> s;ss = s;sort(ss.begin(), ss.end());do {if (s == ss) {break;}ans++;} while (next_permutation(ss.begin(), ss.end()));cout << ans << "\n";return 0;
}

这篇关于【洛谷 P8620】[蓝桥杯 2014 国 A] 排列序数 题解(字符串+排序+全排列)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/919399

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2