• lightoj 1224


    很简单的Trie树,记录每个前缀的次数,dfs一次Trie即可

    #include<set>
    #include<map>
    #include<list>
    #include<stack>
    #include<queue>
    #include<cmath>
    #include<ctime>
    #include<cstdio>
    #include<string>
    #include<vector>
    #include<cstring>
    #include<cstdlib>
    #include<sstream>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define LL long long
    #define INF 0x7fffffff
    #define debug cout << "here" << endl
    #define CLR(X, Y) memset(X, Y sizeof Y)
    #define FOR(X, Y) for(int i = X;i < Y;i ++)
    inline int myMin(int x, int y){return x < y ? x : y;}
    inline int myMax(int x, int y){return x < y ? y : x;}
    struct Node{
        int cnt;
        Node* child[4];
        Node(){
            cnt = 0;
            for(int i = 0;i < 4;i ++) child[i] = NULL;
        }
    };
    int ans;
    Node *root;
    int Hash(char c){
        if(c == 'A') return 0;
        if(c == 'G') return 1;
        if(c == 'C') return 2;
        if(c == 'T') return 3;
    }
    
    void insert(char* str){
        Node *tmp = root;
        while(str[0]){
            int idx = Hash(str[0]);
            if(tmp->child[idx] == NULL) tmp->child[idx] = new Node();
            tmp = tmp->child[idx];
            tmp->cnt ++;
            str++;
        }
    }
    
    void dfs(int dep, Node *tmp){
        if(dep*tmp->cnt > ans) ans = dep*tmp->cnt;
        for(int i = 0;i < 4;i ++){
            if(tmp->child[i]) dfs(dep+1, tmp->child[i]);
        }
    }
    
    int main(int argc, char* argv[]){
        char str[55];
        int t, n, CASE(0);
       // freopen("in.cpp", "r", stdin);
        scanf("%d", &t);
        while(t--){
            root = new Node();
            scanf("%d", &n);
            for(int i = 0;i < n;i ++){
                scanf("%s", str);
                insert(str);
            }
            ans = 0;
            dfs(0, root);
            printf("Case %d: %d
    ", ++CASE, ans);
        }
        return 0;
    }

    树即可,


  • 相关阅读:
    剖析Vue原理&实现双向绑定MVVM
    js处理异步的几种方式
    【转】从Vue.js源码看异步更新DOM策略及nextTick
    js中获取css样式属性值
    原生JS节点操作
    圣杯布局和双飞翼布局的作用和区别
    vue自定义插件-弹框
    MongoDB 数据库创建删除、表创建删除、数据增删改查
    Vue组件之间数据交互与通信
    Vue中的计算属性与$watch
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3933128.html
Copyright © 2020-2023  润新知