zoukankan      html  css  js  c++  java
  • hdu

    统计难题

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)
    Total Submission(s): 35486    Accepted Submission(s): 13269

    Problem Description
    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
     
    Input
    输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

    注意:本题只有一组测试数据,处理到文件结束.
     
    Output
    对于每个提问,给出以该字符串为前缀的单词的数量.
     
    Sample Input
    banana band bee absolute acm ba b band abc
     
    Sample Output
    2 3 1 0
     
    Author
    Ignatius.L
     
    Recommend
    Ignatius.L   |   We have carefully selected several similar problems for you:  1075 1247 1671 1298 1800 
    #include <map>
    #include <set>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <iostream>
    #include <stack>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <cstdlib>
    //#include <bits/stdc++.h>
    //#define LOACL
    #define space " "
    using namespace std;
    //typedef long long LL;
    typedef __int64 Int;
    typedef pair<int, int> paii;
    const int INF = 0x3f3f3f3f;
    const double ESP = 1e-5;
    const double PI = acos(-1.0);
    const int MAXN = 1000000 + 10;
    char str[1000], ask[1000];
    int ch[MAXN][40], word[MAXN], val[MAXN];
    int sz;
    void init() {
        sz = 1;
        memset(ch[0], 0, sizeof(ch[0]));
        memset(word, 0, sizeof(word));
    }
    int idx(char x) {return x - 'a';}
    void insert_str(char *s) {
        int i, j, l = strlen(s);
        int u = 0;
        for(i = 0; i < l; i++) {
            int c = idx(s[i]);
            if(!ch[u][c]) {
                memset(ch[sz], 0, sizeof(ch[sz]));
                val[sz] = 0; ch[u][c] = sz++;
            }
            u = ch[u][c];
            word[u]++;
        }
        val[sz] = 1;
    }
    int find_str(char s[]) {
        int i, j, l = strlen(s);
        int u = 0;
        for(i = 0; i < l; i++) {
            int c = idx(s[i]);
            if(!ch[u][c]) return 0;
            u = ch[u][c];
        }
        return word[u];
    }
    int main() {
        init();
        while(gets(str), str[0]) insert_str(str);
        while(scanf("%s", ask) != EOF) {
            printf("%d
    ", find_str(ask));
        }
        return 0;
    }
    
    
    
  • 相关阅读:
    协作调优
    快速打开你的手机网页
    DB2性能学习笔记V0.1
    IE11将支持SPDY
    Linux性能优化学习笔记V0.1
    memcache学习笔记: http://www.docin.com/p577837919.html
    LoadRunner 测试Tuxedo的问题
    《Web测试技术大全》V0.1发布
    .NET性能分析工具 YourKit Profiler 8 for .NET
    《.NET Performance Testing and Optimization》学习笔记
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770768.html
Copyright © 2011-2022 走看看