ReversalChain

任腾 发表于 2008-05-06 15:38:18

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

map<pair<string,string>,int> h;
int calc(const pair<string,string> &input){
    if (input.first.compare(input.second)==0) return 0;
    if (h.count(input)) return h[input];

    int &res=h[input];
    res=-1;

    for (int i=0;i<input.first.size();i++){
        if (i&&input.first[i-1]!=input.second[i-1]) break;
        for (int j=input.first.size();j>i;j--){
            if (j<input.first.size()&&input.second[j]!=input.first[j]) break;
            pair<string,string> next(
                string(input.first.begin()+i,input.first.begin()+j),
                string(input.second.begin()+i,input.second.begin()+j));
            reverse(next.first.begin(),next.first.end());
            int tmp=calc(next);
            if (tmp==-1) continue;
            tmp++;
            if (res==-1||tmp<res) res=tmp;
        }
    }
    return res;
}

struct ReversalChain{
    int minReversal(string x,string y){
        h.clear();
        return calc(make_pair(x,y));
    }
};
关键词(Tag): c++ algorithm topcoder


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定