Light OJ 1060 - nth Permutation(组合数)
题目大意:
给你一个字符串,问这个字符串按照特定顺序排列之后,第n个字符串是哪个?
题目分析:
首先我们要会求解总个数。也就是共有len个字符,每个字符有ki个,那么总组合方式是多少种?
总组合方式就是: (len!)/(ki !), 把每个ki的阶乘都除一边,最后算出的结果就是答案了。
那么问题就剩下解决第n个字符串的的问题了。
下面我们先了解一下排序计数:
排序计数
- 如1,2,3,4的全排列,共有4!种,求第10个的排列是(从1计起)?
- 先试首位是1,后234有3!=6种<10,说明首位1偏小,问题转换成求2开头的第(10-6=4)个排列,而3!=6 >= 4,说明首位恰是2。
- 第二位先试1(1没用过),后面2!=2个<4,1偏小,换成3(2用过了)为第二位,待求序号也再减去2!,剩下2了。而此时2!>=2,说明第二位恰好是3。
- 第三位先试1,但后面1!<2,因此改用4。末位则是1了。
- 这样得出,第10个排列是2-3-4-1。
然后求解方法和上面阶乘的方法大同小异。
=============================================================================================================
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;
const int INF = 1e9+;
const int MAXN = ;
int vis[];
char str[];
LL Fact[], n; void DFS(int pos,LL num)
{
if(pos == )
{
printf("\n");
return ;
} for(int i=; i<; i++)
{
if(vis[i] == ) continue; LL temp = Fact[pos-]*vis[i]; for(int j=; j<; j++)
temp /= Fact[vis[j]];
if(num > temp)
num -= temp;
else
{
vis[i] --;
printf("%c", 'a'+i);
break;
} }
DFS(pos-, num);
} int main()
{
int T, cas = ;
Fact[] = ;
for(int i=; i<=; i++)
Fact[i] = Fact[i-] * i;
scanf("%d", &T); while(T --)
{
scanf("%s %lld",str, &n); memset(vis, , sizeof(vis));
int len = strlen(str);
for(int i=; str[i]; i++)
vis[str[i] - 'a'] ++;
LL ans = Fact[len]; printf("Case %d: ", cas ++);
for(int i=; i<; i++)
ans /= Fact[vis[i]]; if(ans < n)
puts("Impossible");
else
DFS(len, n);
}
return ;
}
Light OJ 1060 - nth Permutation(组合数)的更多相关文章
- lightoj 1060 - nth Permutation(组合数+贪心)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1060 题解:如果是不重复数的这些操作可以用康托展开的逆来求,如果是有重复数字出 ...
- Light OJ 1318 Strange Game 组合数+高速幂+分解因子
长度为l的用k种字符组成的字符串有k^l中 当中m个字符要不同样 那就是k^l*C(l, m)*(k-1)^m 有反复 要除以2 可是你mod n了 不能直接除 n不一定是素数 所以不能乘以逆元 所以 ...
- nth Permutation LightOJ - 1060
nth Permutation LightOJ - 1060 题意:给定一个小写字母组成的字符串,对其中所有字母进行排列(排列组合的排列),将所有生成的排列按字典序排序,求排序后第n个排列. 方法:按 ...
- Light OJ 1114 Easily Readable 字典树
题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...
- Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖
题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...
- Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖
标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...
- Light OJ 1316 A Wedding Party 最短路+状态压缩DP
题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...
- light oj 1007 Mathematically Hard (欧拉函数)
题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...
- Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...
随机推荐
- dbms_job涉及到的知识点
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...
- OC 知识点回顾
/* 字符串: NSString 不可变字符串 字符串对象的内容不能修改,字符串的指针可以改变 NSMutableString 可变字符串 可以修改字符串对象的内容,继承自NSString , ...
- phaser源码解析(一) Phaser.Utils类下shuffle方法
/** * #一个 基于 费雪耶茨排列 洗牌方法 * A standard Fisher-Yates Array shuffle implementation. * @method Phaser.Ut ...
- html表格 第五节
表格: <html> <head> <title>表格实例</title> </head> <body> <center& ...
- [USACO1.2.2]方块转换 Transformations
P1205 [USACO1.2]方块转换 Transformations 标签 搜索/枚举 USACO 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方 ...
- (LightOJ 1030)期望dp
You are x N grid. Each cell of the cave can contain any amount of gold. Initially you are . Now each ...
- javascript 事件对象
1.事件对象 用来记录一些事件发生时的相关信息的对象 A.只有当事件发生的时候才产生,只能在处理函数内部访问 B.处理函数运行结束后自动销毁2.如何获取事件对象 IE: window.even ...
- ubuntu 下安装软件,卸载,查看已经安装的软件
参考网址:http://wiki.ubuntu.org.cn/UbuntuSkills 一般的安装程序用三种: .deb 和.rpm 这两种安装文件 .bundle 这是二进制的安装文件 而 tar. ...
- 微信公众号-加解密数据demo坑
demo里面的MsgSignature作为url参数一部分了,demo也不更新下 坑爹的微信! 解密信息部分 include_once "wxBizMsgCrypt.php"; $ ...
- "position:relative"在IE中的Bug
当子元素过高导致父元素出现滚动条时,它并不会像预期的那样呆在父元素里,而是浮在父元素之上,并且位置不随滚动条的移动而改变.根源就是子元素的"position:relative".目 ...