• hdu 1298 T9


    字典树+DFS。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    struct shu{ int value, nn[27]; }node[250010];
    int n, q, i, ii, v, zz, tott, anss, tt, ttt;
    const int INF = 0x7FFFFFFF;
    char s[1000], sc[1000], vc[1000], ljb[10][10];
    
    void ljbb()
    {
        ljb[2][0] = 3; ljb[2][1] = 'a'; ljb[2][2] = 'b'; ljb[2][3] = 'c';
        ljb[3][0] = 3; ljb[3][1] = 'd'; ljb[3][2] = 'e'; ljb[3][3] = 'f';
        ljb[4][0] = 3; ljb[4][1] = 'g'; ljb[4][2] = 'h'; ljb[4][3] = 'i';
        ljb[5][0] = 3; ljb[5][1] = 'j'; ljb[5][2] = 'k'; ljb[5][3] = 'l';
        ljb[6][0] = 3; ljb[6][1] = 'm'; ljb[6][2] = 'n'; ljb[6][3] = 'o';
        ljb[7][0] = 4; ljb[7][1] = 'p'; ljb[7][2] = 'q'; ljb[7][3] = 'r'; ljb[7][4] = 's';
        ljb[8][0] = 3; ljb[8][1] = 't'; ljb[8][2] = 'u'; ljb[8][3] = 'v';
        ljb[9][0] = 4; ljb[9][1] = 'w'; ljb[9][2] = 'x'; ljb[9][3] = 'y'; ljb[9][4] = 'z';
    }
    
    void dfs(int ff, int zzz, int gl)
    {
        int i;
        if (ff == ttt)
        {
            if (node[zzz].value > anss)
            {
                anss = node[zzz].value;
                sc[gl] = '';
                strcpy(vc, sc);
            }
            return;
        }
        if (s[ff] == '1') dfs(ff + 1, zzz, gl);
        for (i = 1; i <= ljb[s[ff] - '0'][0]; i++)
        {
            if (node[zzz].nn[ljb[s[ff] - '0'][i] - 'a'] != -1)
            {
                sc[gl] = ljb[s[ff] - '0'][i];
                dfs(ff + 1, node[zzz].nn[ljb[s[ff] - '0'][i] - 'a'], gl + 1);
            }
        }
    }
    
    int main()
    {
        ljbb();
        int sb, bs;
        scanf("%d", &sb);
        for (bs = 1; bs <= sb; bs++)
        {
    
            scanf("%d", &n);
            for (i = 0; i <= 250000; i++)
            {
                node[i].value = 0;
                memset(node[i].nn, -1, sizeof(node[i].nn));
            }
            tott = 1;
            for (ii = 0; ii < n; ii++)
            {
                scanf("%s%d", s, &v);
                zz = 0;
                for (i = 0; s[i]; i++)
                {
                    if (node[zz].nn[s[i] - 'a'] == -1)
                    {
                        node[zz].nn[s[i] - 'a'] = tott;
                        tott++;
                    }
                    zz = node[zz].nn[s[i] - 'a'];
                    node[zz].value += v;
                }
            }
            scanf("%d", &q);
            printf("Scenario #%d:
    ", bs);
            for (ii = 0; ii < q; ii++)
            {
                scanf("%s", s);
                tt = strlen(s);
                for (i = 1; i < tt; i++)
                {
                    anss = -INF;
                    ttt = i;
                    dfs(0, 0, 0);
                    if (anss == -INF) printf("MANUALLY
    ");
                    else printf("%s
    ", vc);
                }
                printf("
    ");
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    leetcode204-统计质数个数之一步步调试超时
    SpringBoot-注解一句话
    算法-总结规律
    kafka-版本变更相关
    异步线程池如何做同步业务
    es-快捷DSL检索手记
    并发学习第七篇——ThreadPoolExecutor
    kafka-consumer端的设计细节
    kafka-producer使用总结
    kafka-topic重要配置分析
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4547078.html
Copyright © 2020-2023  润新知