POJ 1256 Anagram(输入可重集枚举排序)
来源:互联网 发布:山东大学网络教育专业 编辑:程序博客网 时间:2024/05/29 04:43
【题意简述】:本题题意很好理解!题目给出的Hint,使我们对关键点有了更加清晰的认识
An upper case letter goes before the corresponding lower case letter.
So the right order of letters is 'A'<'a'<'B'<'b'<...<'Z'<'z'.
就是给一个序列(序列可以有重复的元素),让我们输出它的所有排列,字母顺序规定给出!
【分析】:这道题是我之前学习枚举排序和子集生成时找到的练习题,关于枚举排序和子集生成的相关算法在这 关于算法竞赛入门经典一书的思考学习——枚举排序和子集生成!
/*Date:2014/11/02By: VIDAttention:这个问题唯一难点就是枚举排列,当然方法不是唯一的,可以使用STL,也可以像我这样自己写枚举的函数。 还有就是在输入的同时自己写一个按照题目规则的字母的优先顺序,然后调用枚举排序函数,得到结果就可以了! */// 232K 329Ms#include<iostream>#include<cstring>using namespace std;#define N 14char P[N],A[N];void order(char* p){int i,j;int len = strlen(p);char tmp;for(i = 0;i<len-1;i++){for(j = i+1;j<len;j++){if(((p[i]>p[j])&&(p[j]>='a'))||((p[i]<'a')&&(p[i]>p[j])&&(p[j]>='A'))||((p[i]>='a')&&(p[j]<'a')&&((p[i]-'a')>=(p[j]-'A')))||((p[i]<'a')&&(p[j]>='a')&&((p[i]-'A')>(p[j]-'a')))){tmp = p[i];p[i] = p[j];p[j] = tmp;}}}//for(i =0;i<len;i++)//cout<<p[i]<<endl;}// 递归… void print_pumutation(int n,char P[],char A[],int cur){int i,j;if(cur == n) // cur指的是当前的位置!{for(i = 0;i<n;i++) cout<<A[i];cout<<endl;}else for(i = 0;i<n;i++)if(!i||P[i]!=P[i-1]) // 这里是为了检查P的第一个元素和所有与第一个元素不相同的元素,// 只有这个时候,我们才对它进行递归调用! {int c1 = 0,c2 = 0;for(j = 0;j<cur;j++)if(A[j] == P[i]) c1++; // 在A[0]~A[cur-1]中P[i]出现的次数。 for(j = 0;j<n;j++)if(P[i] == P[j]) c2++; // 在数组P中P[i]出现的次数。 if(c1<c2){A[cur] = P[i];print_pumutation(n,P,A,cur+1);}}}int main(){int test;int len;cin>>test;while(test--){cin>>P;len = strlen(P);order(P);print_pumutation(len,P,A,0);}return 0;}
0 0
- POJ 1256 Anagram(输入可重集枚举排序)
- poj 1256(Anagram)
- POJ 1256 Anagram(next_permutation全排列)
- POJ 题目1256 Anagram(next_permutation)
- POJ 1256 Anagram
- POJ 1256 Anagram
- poj 1256 Anagram
- poj 1256 Anagram
- POJ 1256 Anagram
- poj 1256 Anagram
- poj 1256 Anagram
- poj 1256 Anagram
- Anagram poj 1256
- POJ - 1256 Anagram
- 7 POJ 1256 Anagram
- poj 1256 Anagram
- POJ 1256:Anagram
- POJ 1256 Anagram
- 自我总结
- AAUTO无标题窗口拖拽
- ubuntu eclipse自动提示崩溃导致自动关闭
- Python标准库:内置函数bytearray([source[, encoding[, errors]]])
- 多维数组的地址转换
- POJ 1256 Anagram(输入可重集枚举排序)
- PJSIP开发手册之模块(二)
- Eclipse工程中读取配置文件方式
- 给Ruby加把火:Ruby 语言将再次走红
- 陈彤和雷军“婚礼”上的神问答
- androidannotations AvailableAnnotations 教程
- cxf下的Service(URL, QName, WebServiceFeature[]) is undefined
- android ListView适配器性能优化
- Find Minimum in Rotated Sorted Array