• 【POJ】1451 T9


    DFS+字典树。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <cstdlib>
      4 
      5 typedef struct Trie {
      6     int v;
      7     Trie *next[26];
      8 } Trie;
      9 
     10 Trie root;
     11 int arr[11] = {0,0,0,3,6,9,12,15,19,22,26};
     12 char buf[105], tmp[105];
     13 char map[105][105];
     14 int max[105], len;
     15 
     16 void create(char str[], int x) {
     17     int i, j, id;
     18     Trie *p = &root, *q;
     19 
     20     for (i=0; str[i]!=''; ++i) {
     21         id = str[i] - 'a';
     22         if (p->next[id] == NULL) {
     23             q = (Trie *)malloc(sizeof(Trie));
     24             q->v = x;
     25             for (j=0; j<26; ++j)
     26                 q->next[j] = NULL;
     27             p->next[id] = q;
     28         } else {
     29             p->next[id]->v += x;
     30         }
     31         p = p->next[id];
     32     }
     33 }
     34 
     35 void del(Trie *t) {
     36     int i;
     37 
     38     if (t == NULL)
     39         return ;
     40     for (i=0; i<26; ++i)
     41         del(t->next[i]);
     42     free(t);
     43 }
     44 
     45 void find(Trie *t, int ti, int step) {
     46     int beg = arr[buf[step]-'0'];
     47     int end = arr[buf[step]-'0'+1];
     48     int i;
     49 
     50     for (i=beg; i<end; ++i) {
     51         if (t->next[i] == NULL)
     52             continue;
     53         tmp[ti] = i+'a';
     54         if (t->next[i]->v > max[step]) {
     55             max[step] = t->next[i]->v;
     56             tmp[ti+1] = '';
     57             strcpy(map[step], tmp);
     58         }
     59         if (step < len-1)
     60             find(t->next[i], ti+1, step+1);
     61     }
     62 }
     63 
     64 int main() {
     65     int case_n, n, x;
     66     int i, j, t;
     67 
     68     scanf("%d", &case_n);
     69 
     70     for (t=1; t<=case_n; ++t) {
     71         for (i=0; i<26; ++i)
     72             root.next[i] = NULL;
     73         scanf("%d", &n);
     74         while (n--) {
     75             scanf("%s %d", buf, &x);
     76             create(buf, x);
     77         }
     78         scanf("%d", &n);
     79         printf("Scenario #%d:
    ", t);
     80         while (n--) {
     81             scanf("%s", buf);
     82             len = strlen(buf);
     83             --len;
     84             memset(max, -1, sizeof(max));
     85             find(&root, 0, 0);
     86             for (i=0; i<len; ++i) {
     87                 if (max[i] == -1)
     88                     break;
     89                 printf("%s
    ", map[i]);
     90             }
     91             for (j=i; j<len; ++j)
     92                 printf("MANUALLY
    ");
     93             printf("
    ");
     94         }
     95         printf("
    ");
     96         del(&root);
     97     }
     98 
     99     return 0;
    100 }
  • 相关阅读:
    idea删除module
    使用腾讯云mysql的一下小坑
    docker 从 tomcat 容器连接到 mysql 容器
    数据结构开发(16):选择排序和插入排序
    数据结构开发(15):递归的思想与应用
    数据结构开发(14):KMP 子串查找算法
    数据结构开发(13):字符串类的创建
    数据结构开发(11):双向循环链表的实现
    数据结构开发(10):Linux内核链表
    数据结构开发(9):循环链表与双向链表
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3810333.html
Copyright © 2020-2023  润新知