uva 11027(数论)
来源:互联网 发布:sqlserver分页查询 编辑:程序博客网 时间:2024/06/07 04:06
题意:给一个字符串,把它的所有回文串按字典序排序,然后给了个n,要求输出第n个回文串是什么,如果没有就输出XXX。
题解:首先判断是否存在第n个回文串,用一个数组f[i]表示A(i),那么一个字符串的排列方式就有A(len) / A(i),其中len是字符串长度,i是指第i个字符的个数,然后先将字典序最小的字母放到两端,然后判断此时剩下的字符串有x种排法,如果x < n说明第一位不是字典序最小的,那么n -= x,否则就让字典序最小的字母放入结果串内,让剩下的字符串以此类推,直到结果串长度达到初始串的一半。
#include <stdio.h>#include <string.h>using namespace std;const int N = 40;char str[N], ans[N];int n, m[N];long long f[N];void init() {f[0] = 1;for (int i = 1; i <= 16; i++)f[i] = f[i - 1] * i;}long long get_num(int x) {long long sum = 1;for (int i = 0; i < 26; i++)sum *= f[m[i]];return f[x] / sum;}int main() {init();int t, cas = 1;scanf("%d", &t);while (t--) {scanf("%s%d", str, &n);printf("Case %d: ", cas++);memset(m, 0, sizeof(m));int len = strlen(str);for (int i = 0; i < len; i++)m[str[i] - 'a']++;int flag = 0, cnt = 0;char cc;for (int i = 0; i <= 25; i++) {if (m[i] % 2) {flag++;cc = i + 'a';}m[i] /= 2;cnt += m[i];}if (flag > 1 || get_num(cnt) < n) {printf("XXX\n");continue;}int res = 0;while (res != cnt) {for (int i = 0; i < 26; i++) {if (m[i]) {m[i]--;long long temp = get_num(cnt - res - 1);m[i]++;if (n <= temp) {ans[res++] = 'a' + i;m[i]--;break;}elsen -= temp;}}}for (int i = 0; i < res; i++)printf("%c", ans[i]);if (flag)printf("%c", cc);for (int i = res - 1; i >= 0; i--)printf("%c", ans[i]);printf("\n");}return 0;}
0 0
- uva 11027(数论)
- uva 11027 - Palindromic Permutation(数论)
- UVa 11889 Benefit (数论)
- UVA 10110(数论)
- UVA 571(数论)
- UVA 1529 - Clock(数论)
- UVA 278 - Chess(数论)
- uva 1529 - Clock(数论)
- UVA 10127 - Ones(数论)
- UVA 10090 - Marbles (数论)
- UVA 756 - Biorhythms(数论)
- uva 10127 - Ones(数论)
- UVA 1434 - YAPTCHA(数论)
- uva 1434 - YAPTCHA(数论)
- UVa 571 - Jugs (数论)
- uva 10105(数论)
- uva 10375(数论)
- uva 10056(数论)
- 编译hadoop2.6.0 --- 64位源代码(能力工场收集)
- zigbee 串口修改PAN ID和CHANNEL,广播发送后重启
- dropdownlist 详解
- 只读事务
- android 将个人应用改为系统应用
- uva 11027(数论)
- LINGO 01-基础教程
- C语言位运算详解
- rails 总结 一种简单的验证登入的方法总结 OK
- Random Forest实战:Java实现 + 手写数字识别
- DevExpress Gridcontrol 表格头复选框 全选全不选
- ZPL指令中文参考地址
- java--练习day02
- IOS开发之在服务器端获取数据,保存网页的Demo学习