栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1409 77377

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1409 77377

#include <iostream>#include <string>using namespace std;const    int        maxn = 105, maxl = 105, maxa = 105;struct words{    string    sequence;    string    word;};struct answers{    int        numbers[301];};int        n, len, total;string    input;answers    ans[maxa];words    dictionary[maxn];void makesequence(words &x){    int        i, l = x.word.length(), temp;    x.sequence = "";    for (i = 0; i < l; i++)    {        temp = (x.word[i] - 'a') / 3 + 2;        switch (x.word[i])        { case    's'    :temp = 7; break; case    'v'    :temp = 8; break; case    'z'    : case    'y'    :temp = 9; break;        }        x.sequence += temp + '0';    }}void init(){    int        i;    total = 0;    memset(ans, 0, sizeof(ans));    getchar();    for (i = 1; i <= n; i++)    {        getline(cin, dictionary[i].word);        makesequence(dictionary[i]);    }    getline(cin, input);    len = input.length();}void work(int start){    int        i,l;    if (start == len)    {        total++;        for (i = 0; i <= ans[total - 1].numbers[0]; i++) ans[total].numbers[i] = ans[total - 1].numbers[i];        return;    }    for (i = 1; i <= n; i++)    {        l = dictionary[i].word.length();        if (l > len - start) continue;        if (input.substr(start, l) == dictionary[i].sequence)        { ans[total].numbers[0]++; ans[total].numbers[ans[total].numbers[0]] = i; work(start + l); ans[total].numbers[0]--;        }    }}bool bigger(answers a, answers b){    int     l,i;    l = a.numbers[0];    if (l > b.numbers[0])        l = b.numbers[0];    for (i = 1; i <= l; i++)    {        if (dictionary[a.numbers[i]].word > dictionary[b.numbers[i]].word) return true;        if (dictionary[a.numbers[i]].word < dictionary[b.numbers[i]].word) return false;    }    if (a.numbers[0] < b.numbers[0])        return true;    return false;}void sort(){    int        i,j;    answers    t;    for (i = 0; i < total - 1; i++)        for (j = i + 1; j < total; j++) if (bigger(ans[i], ans[j])) {     t = ans[i];     ans[i] = ans[j];     ans[j] = t; }}void print(){    int        i,j;    for (i = 0; i < total; i++)    {        cout << dictionary[ans[i].numbers[1]].word;        for (j = 2; j <= ans[i].numbers[0]; j++) cout << " " << dictionary[ans[i].numbers[j]].word;        cout << ".n";    }    cout << "--n";}int main(){    cin >> n;    while (n != 0)    {        init();        work(0);        sort();        print();        cin >> n;    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号