博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 11027 - Palindromic Permutation
阅读量:5132 次
发布时间:2019-06-13

本文共 1486 字,大约阅读时间需要 4 分钟。

  题目意思为解码字符串,要输出第n个回文字符串,因为对称关系,前一半确定了,后一半也就跟着确定了,所以n其实就是前一半字符串的编码,还要减去1,直接解码出来再复制给后半即可

1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 typedef long long ll; 8 9 int T,a[26],st[26],cas=1,len; 10 ll n; 11 char s[50]; 12 13 ll fa(int &x)//阶乘 14 { 15 ll res=1; 16 for(int i=2;i<=x;i++) 17 res*=i; 18 return res; 19 } 20 21 ll f(int*st)//种数 22 { 23 ll x=1,y=1; 24 int sum=0; 25 for(int i=0;i<26;i++) 26 { 27 if(st[i]>1) y*=fa(st[i]); 28 sum+=st[i]; 29 } 30 x=fa(sum); 31 return x/y; 32 } 33 34 ll code(char*s,int *st)//编码,这里没用到,开始理解错题意,以为是大于给出字符串的第n个回文字符串,打了一大堆才发现理解错题意了,main函数中的已删除,编码的就留着 35 { 36 ll x=0; 37 for(int i=0;i
>1;i++) 38 { 39 int cnt=0; 40 st[s[i]-'a']--; 41 for(int j=i+1;j
>1;j++) if(s[j]
>1; 50 for(int i=0;i
>=1; 90 x=i;//x记下长度为奇数时中间那个 91 break; 92 } 93 a[i]>>=1; 94 } 95 i++; 96 } 97 for(;i<26;i++) 98 { 99 if(a[i]&1) break;100 a[i]>>=1;101 }102 if(i<26)103 {104 puts("XXX");105 continue;106 }107 ll goal,all;//最大可能是(30/2)!,超出了int范围,要用ll108 all=f(a);109 goal=n-1;110 if(goal>=all) strcpy(s,"XXX");111 else112 {113 decode(goal,a);114 for(int i=0;i
>1;i++)115 s[len-i-1]=s[i];116 if(len&1) s[len>>1]=x+'a';117 }118 puts(s);119 }120 return 0;121 }
View Code

 

转载于:https://www.cnblogs.com/cdyboke/p/4855938.html

你可能感兴趣的文章
文本隐藏(图片代替文字)
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>