NYOJ143----第几是谁?
2015-01-12 22:09
183 查看
第几是谁?
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述 现在有"abcdefghijkl”12个字符,将其按字典序排列,如果给出任意一种排列,我们能说出这个排列在所有的排列中是第几小的。但是现在我们给出它是第几小,需要你求出它所代表的序列.
输入第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个整数m,它代表着序列的第几小;输出输出一个序列,占一行,代表着第m小的序列。样例输入
3 1 302715242 260726926
样例输出
abcdefghijkl hgebkflacdji gfkedhjblcia
来源[路过这]原创上传者
路过这
逆康拓展开应用
/************************************************************************* > File Name: nyoj143.cpp > Author: ALex > Mail: 405045132@qq.com > Created Time: 2015年01月12日 星期一 21时47分51秒 ************************************************************************/ #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int fn[14]; int ans[14]; bool vis[14]; int main() { fn[0] = 1; for (int i = 1; i <= 12; ++i) { fn[i] = fn[i - 1] * i; } int t; scanf("%d", &t); while (t--) { int k; memset (vis, 0, sizeof(vis)); scanf("%d", &k); k--; int cnt = 0, cur = 11; while (cur > 0) { int x = k / fn[cur]; k %= fn[cur]; cur--; for (int i = 1; i <= 12; ++i) { if (!vis[i]) { if (x == 0) { vis[i] = 1; ans[++cnt] = i; break; } --x; } } } for (int i = 1; i <= 12; ++i) { if (!vis[i]) { ans[++cnt] = i; break; } } for (int i = 1; i <= 12; ++i) { printf("%c", ans[i] - 1 + 'a'); } printf("\n"); } return 0; }
相关文章推荐
- NYOJ - 143 第几是谁? & NYOJ - 149 我排第几个
- NYOJ 139 我排第几个 和 NYOJ 143 第几是谁? 【康拓展开和逆康拓展开】
- nyoj 143 第几是谁?
- NYOJ 题目143 第几是谁?(康拓展开)
- nyoj-143-第几是谁
- NYOJ-143 第几是谁?
- nyoj 143 第几是谁?
- nyoj 139——我排第几个|| nyoj 143——第几是谁? 康托展开与逆康托展开
- nyoj 143 第几是谁?
- NYOJ 143 第几是谁?
- nyoj 143 第几是谁(康拓展开的逆运算)
- NYOj143 第几是谁
- NYOJ143 第几是谁? 【逆康托展开】
- nyoj143 第几是谁(康拓逆展开)
- 【ACM】nyoj_143_第几是谁_201308071558
- 第几是谁(NYOJ)
- nyoj139我排第几个&nyoj第几是谁?——康托展开及康托逆展开
- nyist 139 我排第几个&&143 第几是谁(康托展开和逆康托展开)
- 康托展开之我排第几个与裸康托逆展开之nyoj143
- NYIST 143 第几是谁?(逆康托展开)