LightOJ 1060 - nth Permutation (逆康托展开的思想)
来源:互联网 发布:忘记淘宝账户和密码 编辑:程序博客网 时间:2024/05/19 13:18
题意:
求n<=20长度串的所有排列的按照字典序的第k个序列
分析:
总排列数f=n!/(cnta!∗cntb!∗⋯∗cntz!)
恢复序列的思想类似于逆康托展开 ,点击这里
这个题也可以用状压dp来做−−弱表示不会
代码:
//// Created by TaoSama on 2015-11-20// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;typedef long long LL;int n, cnt[26];LL k, fact[25] = {1};char s[25];int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); int t; scanf("%d", &t); int kase = 0; for(int i = 1; i <= 20; ++i) fact[i] = fact[i - 1] * i; while(t--) { scanf("%s%lld", s + 1, &k); n = strlen(s + 1); memset(cnt, 0, sizeof cnt); for(int i = 1; i <= n; ++i) cnt[s[i] - 'a']++; printf("Case %d: ", ++kase); LL maxk = fact[n]; for(int i = 0; i < 26; ++i) maxk /= fact[cnt[i]]; if(k > maxk) {puts("Impossible"); continue;} for(int i = 1; i <= n; ++i) { for(int j = 0; j < 26; ++j) { if(!cnt[j]) continue; --cnt[j]; LL tmp = fact[n - i]; for(int k = 0; k < 26; ++k) tmp /= fact[cnt[k]]; if(k <= tmp) { putchar('a' + j); break; } ++cnt[j]; k -= tmp; } } puts(""); } return 0;}
0 0
- LightOJ 1060 - nth Permutation (逆康托展开的思想)
- LightOJ 1060 - nth Permutation(dp)
- LightOJ - 1060 nth Permutation(计数)
- lightoj 1060 - nth Permutation(逆康拓展开)
- lightoj 1060 - nth Permutation 组合数学
- LightOJ 1060nth Permutation(组合数--k大字典序)
- Light oj 1060 - nth Permutation(dfs 计数)
- Light OJ 1060 nth Permutation (状压DP)
- UVA 11525 Permutation-不重复全排列的第n项-(康托展开)
- 【UVAlive】康托展开的思想
- Java编程思想(第四版)第二章围绕对象展开的一些要点总结
- HDU 6205 card card card(展开字符串思想+思维)
- LightOJ 1096 nth Term (构造矩阵)
- leetcode[60]Permutation Sequence 以及 全排列的编码与解码——康托展开 (附完整代码)
- nth-child(n)的IE8兼容问题
- ListView点击Item展开隐藏项(单项展开、多项展开、复杂布局时的展开处理)
- 康托展开(ny139)和逆康托展开
- uva11525 - Permutation 线段树加速康托展开
- Codeforces #332 D. Spongebob and Squares (公式)
- R语言初识#02
- UVA - 220 Othello(黑白棋)
- Codeforces Round #332 (Div. 2)_B. Spongebob and Joke
- java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/LruCache;
- LightOJ 1060 - nth Permutation (逆康托展开的思想)
- LightOJ 1057 - Collecting Gold (状压dp)
- spring and Mockito
- Thinkphp中去除URL里的index.php
- 些关于逻辑运算符的知识
- [游戏]传染病CONTAGION联机教程
- android真机调试网络相关
- 指针分析/Point-to Analysis/Reference Analysis
- Web 应用性能提升 10 倍的 10 个建议