hihocoder 1107 Shortest Proper Prefix

原创 2015年11月20日 18:03:19

1107 : Shortest Proper Prefix

时间限制:10000ms
单点时限:1000ms
内存限制:512MB
描述

Query auto-completion(QAC) is widely used in many search applications. The basic idea is that when you type some string s in the search box several high-frequency queries which have s as a prefix are suggested. We say string s1 has string s2 as a prefix if and only if the first |s2| characters of s1 are the same as s2 where |s2| is the length of s2.

These days Little Hi has been working on a way to improve the QAC performance. He collected N high-frequency queries. We say a string s is a proper prefix if there are no more than 5 collected queries have s as a prefix. A string s is a shortest proper prefix if s is a proper prefix and all the prefixes of s(except for s itself) are not proper prefixes. Little Hi wants to know the number of shortest proper prefixes given N collected queries.

Hint: the 4 shortest proper prefixes for Sample Input are “ab”, “bb”, “bc” and “be”. Empty string “” is not counted as a proper prefix even if N <= 5.

输入
The first line contains N(N <= 10000), the number of collected queries.

The following N lines each contain a query.

Each query contains only lowercase letters ‘a’-‘z’.

The total length of all queries are no more than 2000000.

Input may contain identical queries. Count them separately when you calculate the number of queries that have some string as a prefix.

输出
Output the number of shortest proper prefixes.

样例输入
12
a
ab
abc
abcde
abcde
abcba
bcd
bcde
bcbbd
bcac
bee
bbb
样例输出
4

//trie树

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <algorithm>
#include <map>
#include <vector>

using namespace std;

struct trie{ //建立一颗字典树
    char key;
    int num;
    trie *next[26];
    trie(){
        num = 0;
        for(int i = 0; i < 26; i++) next[i] = NULL;
    }

};

trie root;//创建根节点

void ins(string s) { //插入新单词
    trie *head = &root;

    for(int i = 0; i < s.size(); i++) {
        int k = s[i] - 'a';

        if(head->next[k] == NULL) {
            trie *node = new trie;
            node->key = s[i];
            head->next[k] = node;

        }
        head = head->next[k];
        head->num++;
    }

}

int ans = 0; //题目所述proper prefix的个数
map<trie *,int>k; //建立一个映射,后面会用到

void bia(trie *head) {//遍历字典树

         for(int i = 0; i < 26; i++) {
            int flag = 0;

            if(head->num <= 5 &&head != &root) {//满足条件的节点
                    if(k[head] != 1)//若此节点之前未统计过
                    ans++;
                    flag = 1; //标记,此节点后面的分支都不用再遍历了
                    k[head] = 1;//已统计过的节点,标记一下
            }

            //不是最后一个节点且前面还没遇到满足条件的节点
             if(head->next[i] != NULL && !flag)        
               bia(head->next[i]);//递归

        }

}

int main(){

    string s;
    int n,m;
    cin >> n;
    while(n--) {
        cin >> s;
        ins(s);
    }

    trie *head = &root;

    bia(head);
    cout << ans;
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

poj2001Shortest Prefixes【字典树找最短唯一前缀】

Language: Default Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K To...
  • R1986799047
  • R1986799047
  • 2015年11月23日 16:12
  • 430

百度2017年暑假实习生编程题目(第三题)---3、进程调度算法 短作业优先(SJF, Shortest Job First)又称为“短进程优先

百度2017年暑假实习生编程题目(第三题) 3、进程调度算法 短作业优先(SJF, Shortest Job First)又称为“短进程优先”SPN(Shortest Process Next);是...
  • u013000638
  • u013000638
  • 2016年09月08日 20:10
  • 558

CodeVS 1107 等价表达式【NOIP2005】【模拟

…………我觉得吧,这题有毒 讲道理,括号都不能匹配的……拿头求值啊x 嗯反正带几个质数进去直接算一算 卡不掉的 ……我还是码力不够233333 #include #define MOD...
  • Flaze_
  • Flaze_
  • 2016年10月16日 21:15
  • 271

hihoCoder#1032_最长回文子串

求最长回文子串的算法比较经典的是manacher算法,下面写写自己的理解。 (文中用到的图片来自这里,博主写的很好,由于为了图片和代码一致,我稍微p了一下图片。) 首先,说明一下用到的数组和其他参...
  • sinat_30071459
  • sinat_30071459
  • 2016年04月02日 19:37
  • 1483

ACM解题总结——HihoCoder1199 (微软笔试题)

题目来源:     HihoCoder1199  题目要求:     There is a tower defense game with n levels(missions). The n le...
  • octopusflying
  • octopusflying
  • 2016年08月03日 21:25
  • 1310

hihocoder #1033 交错和问题的思考

题目要求如下: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, …, an - 1,定义...
  • u011467044
  • u011467044
  • 2016年11月08日 22:26
  • 443

hihoCoder - 1089 - 最短路径·二:Floyd算法 (floyd算法!!)

#1089 : 最短路径·二:Floyd算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的中午,小Hi和小H...
  • u014355480
  • u014355480
  • 2015年01月01日 23:15
  • 757

所有节点对之间的最短路问题(All Pair Shortest Path)--《算法导论》

给定一个有向图求出里面所有节点对之间的最短路径。 问题的详细描述见Wikipedia:https://en.wikipedia.org/wiki/Shortest_path_problem。 介绍...
  • Dylan_Frank
  • Dylan_Frank
  • 2016年08月28日 23:52
  • 509

最短路径问题(1)

作为一名小白,最近学习了Dijkstra算法,对于最短路径的解有了一定的认识,从PTA的题目来说明Dijkstra算法 4-1 Shortest Path [3]   (25分) Wri...
  • csucbMIT
  • csucbMIT
  • 2016年11月25日 09:46
  • 550

九度OJ 1107 搬水果(Huffman编码)

原题地址:http://ac.jobdu.com/problem.php?pid=1107 题目描述:     在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定...
  • lecholin
  • lecholin
  • 2017年03月26日 16:06
  • 256
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hihocoder 1107 Shortest Proper Prefix
举报原因:
原因补充:

(最多只允许输入30个字)