计算当前序列的字典序序号(洛谷P2524题题解,Java语言描述)
题目要求
P2524题目链接
分析
这题就用康托展开吧:
result = a[n] * [(n-1)!] + a[n-1] * [(n-2)!] + … + a[1] * [0!]
实现代码:
private static int cantor(int num, char[] chars) {int result = 1;for(int i = 0; i < num; i++) {int temp = 0;for(int j = i+1; j < num; j++) {if(chars[i] > chars[j]) {temp++;}}result += temp * factorial[num-i-1];}return result;
}
先把阶乘的数据打好就完事……
当然,C++的STL还有这么个函数:next_permutation(),可以生成下一序列,也可利用这个函数来做。
AC代码(Java语言描述)
import java.util.Scanner;public class Main {private static int[] factorial = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};private static int cantor(int num, char[] chars) {int result = 1;for(int i = 0; i < num; i++) {int temp = 0;for(int j = i+1; j < num; j++) {if(chars[i] > chars[j]) {temp++;}}result += temp * factorial[num-i-1];}return result;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();char[] chars = scanner.next().toCharArray();scanner.close();System.out.println(cantor(num, chars));}}
计算当前序列的字典序序号(洛谷P2524题题解,Java语言描述)相关推荐
- 字符串的排序不一定要完全按照字典序(洛谷P1012题题解,Java语言描述)
题目要求 P1012题目链接 分析 直接按照字符串处理,可以按照字典序排序. 但这样存在问题: 比如32和321,我们按照字典序进行排序"321">"32" ...
- 线性存储的最短平均检索时间(洛谷P1253题题解,Java语言描述)
题目要求 P1253题目链接 分析 很像 ~洛谷P1223题题解~,也是一种类似SJF的贪心法. 排个序,由于两个不大于10000的数,乘起来还是int,就使用int属性吧. 数据量小,所以Scann ...
- 队列模拟约瑟夫问题(洛谷P1996题题解,Java语言描述)
题目要求 P1996题目链接 分析 以前就研究过"约瑟夫环"问题: <单循环链表求解约瑟夫环问题(Java语言描述)> <杀人游戏~约瑟夫环(洛谷P1145题题解 ...
- 用任意合法序列建立一棵二叉树(洛谷P1305题题解,Java语言描述)
前言 这题是极其麻烦极其麻烦的一道题(前提是你不知道它有套路)-- 我们不讲那些歪门邪道,我们正儿八经的解一下,想正经求解,很麻烦很麻烦... 题目要求 P1305题题解 分析 这题你看着容易,那是你 ...
- 麦森数(洛谷P1045题题解,Java语言描述)
题目要求 题目链接 分析 这题挺经典的,快速幂取模算法,如果求出大数再取模就可能T掉. 之前有篇文章写了这个算法:<快速幂算法详解&&快速幂取模算法详解> 既然是Java, ...
- 枚举求解单词方阵(洛谷P1101题题解,Java语言描述)
题目要求 P1101题目链接 分析 可以用DFS做,但我立下了个Flag,所以就用了朴素的枚举来做.... 结果,我的天哪,做了好几个小时-- 其实这种地图题,真的适合 DFS or BFS or D ...
- 快速幂||取余运算【模板】(洛谷P1226题题解,Java语言描述)
题目要求 P1226题目链接 分析 标准的快速幂取模算法板子,之前这个算法我在这篇文章中讲过了:<快速幂算法详解&&快速幂取模算法详解>. 这里选择使用比较简单的API实现 ...
- 求子集元素之和(洛谷P2415题题解,Java语言描述)
题目要求 P2415题目链接 分析 这题我觉得--当个数学题做就好了嘛. 有一个数N的情况:result = 1 * N 有两个数N1.N2的情况:result = 2 * (N1+N2) 有三个数N ...
- 用0和5凑被90整除的max数(洛谷P2192题题解,Java语言描述)
题目要求 P2192题目链接 分析 盘一盘各种情况吧: 要被90整除,就必须被10整除,所以必须有0,没0就是-1啊. 要被90整除,一堆5,靠0是没用的,只能是9个5凑一堆儿才有用,有0但凑不够9个 ...
最新文章
- [译] MDC-101 Flutter:Material Components(MDC)基础(Flutter)
- CTFshow 命令执行 web63
- HDU4367(线段相交与斐波那契数列)
- BGP小实验(二)——还是他,继续第二波走起来
- JS加密算法简单分析
- Java 高级—— IO 基础
- 超干货 | 2019秋招CV算法面经
- excel2010设置列宽为像素_职场新手都能学会的Excel技巧:快速调整行高、列宽
- nlogn最长单调递增
- Atitit Hadoop的MapReduce的执行过程、数据流的一点理解。 目录 1. Why 为什么使用hadoop	1 2. Hadoop的MapReduce的执行过程	1 2.1. Had
- Kettle_设置全局变量
- 光线微弯传感器matlab仿真,光纤压力与位移传感特性
- python — Auto_QQ连连看
- mbp网速很慢_macbook上网速度慢(mac网速慢解决方案)
- cmyk列印颜色_列印
- Oracle数据库恢复时要建库吗_【DB】数据库面试笔试题库及详解(小麦苗DBA宝典出品)数据库运维宝典...
- java毕业设计招聘管理系统Mybatis+系统+数据库+调试部署
- Python中while循环练习——打印星星总结
- 【国信长天蓝桥杯】扩展板⑦ 光敏电阻的使用
- Oracle中V$SESSION等各表的字段解释,Oracle官方解释
热门文章
- 【转】LDA数学八卦
- hdu 3836 Equivalent Sets
- Servlet的学习之Request请求对象(2)
- 通过gdb调试分析Linux内核的启动过程
- 程序一旦发觉写得不理想,那就得重构它
- mysql安装及一些注意点
- DR.com客户端解密过程逆向分析
- linux进程管理之mm_struct,【转】Linux进程管理之SMP负载平衡(续二)
- gitee存放代码_git / gitee 提交本地仓库代码到Git或Gitee流程 及 常见报错
- 龙武2服务器在维护,龙武5.25更新维护时间_龙武5.5更新维护详情_牛游戏网