ACM 编码与下一个排列
来源:互联网 发布:怎么加入淘宝联盟 编辑:程序博客网 时间:2024/05/20 05:53
STL中的next_permutation的实现原理
从右到左扫描找到第一个Ai<Ai+1
交换Ai,Ai+1,然后排序Ai+1到An
#include <iostream>#include <algorithm>using namespace std;string Next_Permutation(string str){ string strb; int i; bool ok=false; strb=str; int len=str.length(); for(i=len-2;i>=0;i--) { if(str[i]<str[i+1]){ok=true;break;} } if(!ok) return strb; swap(strb[i],strb[i+1]); sort(&strb[i+1],&strb[strb.length()-1]); return strb;}int main(){ cout<<Next_Permutation(string("321")); return 0;}
求某一个排列的编码
求和(Ai-Bi)*(n-i)!
Bi为Ai左边比Ai小的数的个数
#include <iostream>using namespace std;int Fact[9];int Code(string str){ int code; int len=str.length(); int *pcnt=new int[len]; for(int i=0;i<len;i++) { pcnt[i]=0; for(int j=0;j<i;j++) { if(str[j]<str[i]) pcnt[i]++; } } code=0; for(int i=1;i<=len;i++) { code+=(str[i-1]-'1'-pcnt[i-1]-1)*Fact[len-i]; } delete pcnt; return code;}int main(){ //¼ÆËã½×³Ë Fact[0]=1; for(int i=1;i<=8;i++) Fact[i]=i*Fact[i-1]; cout<<Code("231"); return 0;}
0 0
- ACM 编码与下一个排列
- [ACM] poj 1146 ID Codes(字符串的下一个排列)
- ACM算法训练之——下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- LinkCode 下一个排列、上一个排列
- POJ 1146 下一个排列
- 下一个排列(Next Permutation)
- Next Permutation 下一个排列
- 寻找下一个最大排列
- uva 146(下一个排列)
- 7.2.4 下一个排列
- [tarjan] hdu 4635 Strongly connected
- 解决Struts配置文件中无提示信息的问题
- Polar Si9000使用方法----阻抗匹配软件
- wxython中List,ComboBox的使用
- UVa OJ 104 - Arbitrage
- ACM 编码与下一个排列
- word2007中如何生成目录
- opencv-1.1静态库
- VC 获取系统特殊文件夹的路径如:系统目录,桌面等
- 资讯的低准确相似文档——Lucene的MoreLikeThis
- javascript动画基础(四)--三角学在动画中的运用(3)
- 第一章数据结构思维导图
- C++ dynamic binding
- js 控制在关闭ie的提醒