UVA 10391 Compound Words

来源:互联网 发布:linux rsync 同步目录 编辑:程序博客网 时间:2024/06/01 08:04

题目大意:给出一列单词 字典序输出是由其他俩个单词组合成的单词
解题思路:存储合成的单词时间复杂度为n^2会超时,所以用拆分单词来解决

#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <map>#include <vector>using namespace std;int n;string s[130000];vector<string> s2;map<string, int> Ma;bool cmp(string x, string y) {    if(x.compare(y) < 0) {        return true;    }    else {        return false;    }}void jud() {    for(int i = 0; i < n; i++) {        for(int j = 0; j < s[i].size()-1; j++) {            string a = s[i].substr(0, j+1);            string b = s[i].substr(j+1, s[i].size() - j - 1);            if(Ma[a] && Ma[b]) {                s2.push_back(s[i]);                break;            }        }    }    sort(s2.begin(), s2.end(), cmp);}void init() {    for(int i = 0; i < n; i++) {        Ma[s[i]] = 1;    }}int main() {    n = 0;    while(cin >> s[n]) {        n++;    }    init();    jud();    for(int i = 0; i < s2.size(); i++) {        cout << s2[i] << endl;    }    return 0;}
原创粉丝点击