zoukankan      html  css  js  c++  java
  • hdu 1251 统计难题(求前缀出现了多少次)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #define mem(a,b) memset(a,b,sizeof(a));
    using namespace std;
    typedef long long ll;
    const int maxn = 500005;
    const ll INF = 0x3f3f3f3f;
    int tot,n,trie[maxn][26],sum[maxn];
    bool vis[maxn],flag;
    void Insert(char *s,int rt)
    {
        int len = strlen(s);
        for(int i = 0; i < len; i++)
        {
            int k = s[i] -'a';
            if(trie[rt][k] == 0) trie[rt][k] = ++tot;
            sum[trie[rt][k]]++;
            rt = trie[rt][k];
        }
    }
    int Find(char *s,int rt)
    {
        int len = strlen(s);
        for(int i = 0; i < len; i++)
        {
            int k = s[i] -'a';
            rt = trie[rt][k];
            if(rt == 0) return 0;
        }
    
        return sum[rt];
    }
    int main()
    {
        tot = 0;
        int rt = 0;
        flag = false;
        char s[105];
        while(1)
        {
            gets(s);
            if(s[0] == NULL)
            {
                break;
            }
                Insert(s,rt);
        }
        while(cin >> s) {
                cout << Find(s,rt) << endl;
        }
        return 0;
    }
  • 相关阅读:
    安卓系统
    移动互联网产品设计的原则
    Java 笔记10
    Get Android Source Code
    Spinner Animation
    Java 笔记09
    Java 笔记07
    Java 笔记08
    例题
    例题
  • 原文地址:https://www.cnblogs.com/LLLAIH/p/11330433.html
Copyright © 2011-2022 走看看