1256 Anagram

题目链接: http://poj.org/problem?id=1256

题意: 根据自定义的字典序: 'A'<'a'<'B'<'b'<...<'Z'<'z' 和输入的字符串(最长为13), 输出按新字典序的全排列.

分析: 题目简单, 但是要处理好映射关系.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int mp[13]; // 字符串中的各个字符按相对大小映射到mp中.

int main(){
    int T,n;
    cin>>T;
    while(T--){
        string s;
        cin>>s;
        int len = s.length();
        for(int i=0;i<len;++i){
            if(s[i]>='a' && s[i] <= 'z'){
                mp[i] = (s[i]-'a')*2+1;
            }else{
                mp[i] = (s[i]-'A')*2;
            }
        }
        sort(mp,mp+len);
        do{
            for(int i=0;i<len;++i){
                char c;
                if(mp[i]%2){
                    c = 'a'+mp[i]/2;
                }else{
                    c = 'A'+mp[i]/2;
                }
                cout<<c;
            }
            cout<<endl;
        }while(next_permutation(mp,mp+len));
    }
    return 0;
}
posted @ 2015-10-17 12:52  roger9567  阅读(146)  评论(0编辑  收藏  举报