hdu 2846】的更多相关文章

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2846 题目大意:有多个文本,多个模式串.问每个模式串中,有多少个文本?(匹配可重复) 解题思路: 传统AC自动机是计算单个文本中,模式串出现次数. 这里比较特殊,每个文本需要单独计算,而且每个匹配在每个文本中只能计数1次. 比如add,d只能计数1次,而不是:两次. 所以循环逐个对文本Find.每个Find里,进行Hash,保证每个匹配串只计数1次. 由于匹配串可重复,在Insert之前,也需要离散…
http://acm.hdu.edu.cn/showproblem.php?pid=2846 Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2720    Accepted Submission(s): 1060 Problem Description When you go shopping, you can s…
http://acm.hdu.edu.cn/showproblem.php?pid=2846 题意:给出N个模式串,再给出M个文本串,问每一个文本串在多少个模式串中出现. 思路:平时都是找前缀的,这里将模式串s[1……len]的每一个[i,len]的子串都插入,这样就可以满足条件.还要注意如果两个子串都为同一个模式串的子串,不能重复计数.可以用一个id数组装上一次是哪个串的id,如果id相同就不要重复计数了. #include <cstdio> #include <algorithm&g…
Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2932    Accepted Submission(s): 1116 Problem Description When you go shopping, you can search in repository for avalible merchandises…
Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 6444    Accepted Submission(s): 2096 Problem Description When you go shopping, you can search in repository for avalible merchandises b…
Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 5048    Accepted Submission(s): 1739 Problem Description When you go shopping, you can search in repository for avalible merchandises b…
题目 字典树,注意初始化的位置~!!位置放错,永远也到不了终点了org.... 我是用数组模拟的字典树,这就要注意内存开多少了,,要开的不大不小刚刚好真的不容易啊.... 我用了val来标记是否是同一个串分解而来的,保存的是串的编号 num记录数目. //string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last); //把[first0,last0)之间的部分替换成[firs…
字典树的变形,常规字典树用来求前缀的,所以把每个单词拆成len个词建树,为了避免abab这样的查ab时会出现两次,每次加一个标记,如果该节点上次的建树的单词与本次相同就不更新,否则更新 #include<stdio.h> #include<string.h> #include<stdlib.h> struct tree { struct tree *son[26]; int count; int flag; }*root; void insert(char *p,int…
字典树较为复杂的应用,我们在建立字典树的过程中需要把所有的前缀都加进去,还需要加一个id,判断它原先是属于哪个串的.有人说是AC自动机的简化,但是AC自动机我还没有做过. #include<iostream> #include<string.h> #include<cstdio> using namespace std; ],b[]; struct Node { int id,num; Node *sons[]; Node() { id = -,num = ; ; j…
给出若干模式串,再给出若干询问串,求每个询问串作为多少个模式串的子串出现. 如果一个串是另一个串的子串,则一定是另一个串某个前缀的后缀或者某个后缀的前缀.根据字典树的性质,将模式串的每一个后缀插入字典树中,同时更新字典树中节点的cnt值.这里需要注意不要重复累加贡献,可以在字典树中新增一个num的信息值来实现这一点. #include <iostream> #include <vector> #include <algorithm> #include <strin…