zoukankan      html  css  js  c++  java
  • Google Code Jam 2019 Round 1A C题(Trie树)

    这题其实就是后缀相同的对数,我们可以倒序插入到Trie树中,之后贪心的选前缀长的,之后再选前缀小的,这样比较好用dfs操作

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    #include<queue>
    #include<set>
    #define ull unsigned long long
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    typedef pair<int,pair<int,int> > plll;
    const int N=1e5+10;
    const int inf=0x3f3f3f3f;
    string s;
    int idx;
    int tr[N][27];
    int cnt[N];
    void insert(){
        int i;
        int cur=0;
        for(i=s.size()-1;i>=0;i--){
            int x=s[i]-'A';
            if(tr[cur][x]==0)
                tr[cur][x]=++idx;
            cur=tr[cur][x];
            cnt[cur]++;
        }
    }
    int solve(int u){
        if(cnt[u]==1)
            return 0;
        int res=0;
        int i;
        for(i=0;i<26;i++){
            if(tr[u][i]){
                res+=solve(tr[u][i]);
            }
        }
        int tmp=cnt[u]-res;
        if(tmp>=2)
            res+=2;
        return res;
    }
    int main(){
        int t;
        cin>>t;
        int times=1;
        while(t--){
            int n;
            cin>>n;
            int i;
            idx=0;
            memset(tr,0,sizeof tr);
            memset(cnt,0,sizeof cnt);
            for(i=1;i<=n;i++){
                cin>>s;
                insert();
            }
            int res=solve(0);
            printf("Case #%d: ",times++);
            cout<<res<<endl;
        }
    }
    View Code
  • 相关阅读:
    原子核壳模型程序 BigStick 的用法
    c++ 中的下三角阵矩阵元标记
    BCS方程和Bogoliubov变换
    圆膜振动问题
    核结构单体跃迁算符
    python画球谐函数
    gnuplot 绘制球谐函数图
    shell 脚本小知识集锦
    6.12学习总结
    PHP网上商城
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12676497.html
Copyright © 2011-2022 走看看