zoukankan      html  css  js  c++  java
  • hdu

    题意:给出N个由小写字母组成的队名,用一台古老的打印机这些队名打印出来,问最少要敲几次键盘(队名之间不用按输入顺序),这台打印机只能执行以下3种操作:

    1.在现有基础上的末尾继续输入小写字母;

    2.删除最后一个字母;

    3.打印现有串。

    (1 <= N <= 10000, 队名长度 <= 50)

    ——>>组织好Trip,记录总结点数sz,每个结点到根结点的距离,得到距离根结点最远的结点的距离Max,那么答案为2 * sz + N - Max。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int maxw = 50 + 10;
    int N;
    char name[maxw];
    
    struct node{
        int dis;
        node *next[26];
        node(){
            dis = 0;
            memset(next, 0, sizeof(next));
        }
    };
    
    struct Trip{
        node *root;
        int Max;
        int sz;
    
        Trip(){
            root = new node;
            Max = -1;
            sz = 0;
        }
    
        int idx(char c){
            return c - 'a';
        }
    
        void insert(char *s){
            node *t = root;
            int len = strlen(s), i;
            for(i = 0; i < len; i++){
                int c = idx(s[i]);
                if(!t->next[c]){
                    t->next[c] = new node;
                    sz++;
                }
                t->next[c]->dis = t->dis + 1;
                t = t->next[c];
            }
            Max = max(Max, t->dis);
        }
    
        void solve(){
            printf("%d
    ", 2 * sz + N - Max);
        }
    };
    
    int main()
    {
        while(scanf("%d", &N) == 1){
            Trip trip;
            for(int i = 0; i < N; i++){
                scanf("%s", name);
                trip.insert(name);
            }
            trip.solve();
        }
        return 0;
    }
    


  • 相关阅读:
    在Visual Studio中使用NUnit
    C#调用Exe
    网页用chrome打开为乱码
    ctags最基本用法
    Facebook Connect
    SVM初体验
    python中可恶的回车符
    初识PowerDesigner
    Mysql中文乱码问题解决
    stat函数
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3268531.html
Copyright © 2011-2022 走看看