单词检索

数据结构实训——单词检索统计程序 /***********************************************************   * 版权所有 (C)2016,WuHao  *   * 项目名称:单词检索统计程序   * 其它说明: 各个模块函数    * 作 者:    武昊   * 完成日期: 20161230   ********************************** 阅读详情

题目描述
小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务。
由于学校需要一些材料,校长需要在文章中检索一些信息。校长一共给了小可可N篇文章,每篇文章为一个字符串。现在,校长需要他找到这样的单词,它至少在这N篇文章中的M篇文章里出现过,且单词长度为L。可是,工作量十分庞大,但校长又急需小可可完成这项任务。
现在他向你求助,需要你编写程序完成这项艰巨的任务。

输入
第1行3个正整数N,M,L,表示文章的数目,单词至少出现在M篇文章中和每个单词的长度。
接下来N行,每行一个字符串,表示一篇文章。
输出
仅一行,表示满足检索条件的单词数。

样例输入
3 2 2
noip
istudycpp
imacppstudent
样例输出
5

提示
这5个单词分别为:st,tu,ud,pp,cp。
对于20%的数据有1≤N,M≤10;
对于60%的数据有1≤N,M≤100;
对于100%的数据有1≤N,M≤2000,L≤1000。每篇文章长度不大于1000,均有小写字母组成。

Solution

人生第一道hash。
以前一直知道hash,是把信息转化成一个整数再放到数组里。但一直没有写过。直到上次考了这道。。。
我们可以把字符串看成一个26进制的数,对每一段字符串,我们记录两个信息。
u表示字符串的小hash值
v表示字符串的大hash值
如果u一样,就把它们链起来,但如果v又一样的话,就有错误了。但v值mod的大质数因为非常大,所以这个出错的概率是很小的。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
int n,m,ap,k1,u,ans,len,tot;
ll v,k2;
char s[1005];
const int minmod=999973; //小质数
const ll maxmod=(ll)(499999999999993); //大质数
struct ty
{
    int p,cnt;
    ll maxhash;
}Hash[1000005];
int head[1000005],Next[1000005];
void add(int x,int y,ll z) //添加进链表
{
    tot++;
    Hash[tot].maxhash=z;
    Hash[tot].cnt=1;
    Hash[tot].p=y;
    Next[tot]=head[x];
    head[x]=tot;
}
void Find(int art,int u,ll v)
{
    for(int i=head[u];i!=-1;i=Next[i]) //遍历小hash值的一条链
    if(v==Hash[i].maxhash) //大hash值一样,就说明字符串一样
    {
        if(art==Hash[i].p) return; //该文章已经出现过,就不用再加了
        Hash[i].p=art; //更新是哪个文章,前面的文章不可能再出现,所以直接更新
        Hash[i].cnt++;
        return;
    }
    add(u,art,v);
}
int main()
{
    cin>>n>>ap>>m;
    for(int i=0;i<minmod;i++) head[i]=-1;
    k1=1;k2=1;
    for(int i=1;i<m;i++) 
    {
        k1=k1*26%minmod; 
        k2=k2*26%maxmod;
    }
    for(int i=1;i<=n;i++) 
    {
        scanf("%s",s+1);
        len=strlen(s+1);
        u=0;v=0;
        for(int j=1;j<=m;j++) 
        {
            u=(u*26+s[j])%minmod;
            v=(v*26+s[j])%maxmod;
        }
        Find(i,u,v);
        for(int j=m+1;j<=len;j++) 
        {
            u=((u-k1*s[j-m])%minmod+minmod)%minmod;//去掉第一位
            v=((v-k2*s[j-m])%maxmod+maxmod)%maxmod;
            u=(u*26+s[j])%minmod;//添加最后一位
            v=(v*26+s[j])%maxmod;
            Find(i,u,v);
        }
    }
    for(int i=1;i<=tot;i++) 
    if(Hash[i].cnt>=ap) ans++;
    cout<<ans;    
    return 0;
}
课程设计三之单词检索统计程序 课设要求 1. 建立一个文本文件,文件名由用户用键盘输入; 2. 给定单词计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数; 3. 检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。 上代码 (标注:采用KMP算法,进行字符串匹配,完成单词统计与定位功能。) //fun.cpp #include"fun.h" #include<io... 阅读详情

相关推荐

文本文件单词的检索与计数

文本文件单词的检索与计数 实验任务 建立一个文本文件,统计给定单词在文本文件中出现的总次数及位置 实现要求 文本文件中每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写,统计给定单词在文本文件中出现的总次数,检索输出的某个单词出现在文本中的行号、在该行中出现的位置。 设计数据量大的文本,进行子串的查询处理,分析算法运行的时间效率,对所有输出的匹配位置结果进行验证,以证明算法设计和实现的正确性。 用朴素模式匹配算法或KMP算法实现字符串定位。 可正确读取,保存文本。 主要设计 为实现数据的有序存储,该

A_FEI_LINUX的博客 974

第四天:字符统计

问题描述   给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。 输入格式   第一行一个数字L。   第二行是字符串S。   L大于0,且不超过S的长度。 输出格式   一行,题目要求的字符串。 输入样例1:   4   bbaabbaaaaa 输出样例1:   bbaa 输入样...

lance~crazy 656

单词词频统计与单词检索

【AHNU | 计信 | 数据结构】本文实现了“单词词频统计与单词检索”,也是数据结构节课的大实验啦~

weixin_52099756的博客 1301

Keywords Search

给定nn个长度不超过5050的由小写英文字母组成的单词准备查询,以及一篇长为mm的文章,问文中出现了多少个待查询的单词。对于每组数据,第一行一个整数nn,接下去nn行表示nn个单词,最后一行输入一个字符串,表示文章。对于全部数据,1\len\le10^4,1\lem\le10^61≤n≤104,1≤m≤106。对于每组数据,输出一个数,表示文中出现了多少个待查询的单词。第一行一个整数TT,表示数据组数;...

weixin_62599885的博客 312

用Python手把手教你实现一个多层感知机(MLP)——从理论到代码实战

本文详细介绍了如何使用Python和Theano库从零开始实现多层感知机(MLP),涵盖从核心原理到代码实战的全过程。通过构建隐藏层、输出层和完整MLP模型,结合权重初始化、激活函数选择和训练技巧,帮助开发者深入理解神经网络工作机制,并应用于实际机器学习任务。

web39explorer的博客 970

数据分析—用户行为数据分析

一般价值用户(R高F高M低):用户处于购买活跃期,感兴趣的商品多,购买次数少 → 针对该部分客户,目的就是要让他们购买,所以可以和运营部门沟通,降低利润,给出有力折扣促进购买,进而转为重要价值用户。重要价值用户(R高F高M高)维护:用户处于购买活跃期,感兴趣的商品多,购买次数也多 → 针对兴趣产品,保持一定频率的触达,持续维护。

m0_74091312的博客 1419

单词分析 题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。

/* * 题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。 现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。 输入描述 输入一行包含一个单词,单词只由小写英文字母组成。 对于所有的评测用例,输入的单词长度不超过 1000。 输出描述 输出两行,第一行包含一个英文字母,表示单词中出现得最多

weixin_46358119的博客 5156

VS Code配置MinGW64编译非线性优化库NLopt

VS Code用MinGW64编译C++代码安装MSYS2软件并配置非线性优化库NLopt和测试引用库代码的完整具体步骤。:若使用非UCRT版本(如传统MinGW64),替换所有路径中的。库文件会自动安装到MSYS2的。

weixin_30777913的博客 902

【模板】字符串哈希 (【JZOJ3870】单词检索(search))

DescriptionDescriptionDescription 小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务。 由于学校需要一些材料,校长需要在文章中检索一些信息。校长一共给了小可可 NNN 篇文章,每篇文章为一个字符串。现在,校长需要他找到这样的单词,它至少在这 NNN 篇文章中的 MMM 篇文章里出现过,且单词长度为 LLL 。可是,工作量十分庞大,但校长又急需小可可完成...

夕弦 551

STM32F407+LWIP实战:手把手教你移植mbedtls库实现Modbus TCP双向认证

本文详细介绍了如何在STM32F407微控制器上移植mbedtls库,结合LWIP协议栈实现Modbus TCP的双向认证功能。通过TLS 1.2加密通道,有效提升工业物联网通信的数据安全性,涵盖证书管理、内存优化及性能调优等关键步骤,为嵌入式系统开发者提供了一套完整的解决方案。

weixin_28721917的博客 516

App inventor2通过蓝牙控制Arduino Uno LED开关

App inventer2控制Arduino Uno LED开关 如果学会这个小程序,大部分的手机通过蓝牙控制Arduino的功能都可以实现,这个小示例是通过蓝牙模块向Arduino发送"0"和"1",而其它功能要发送其它不同的字符串内容给Arduino. 所需硬件: Arduino Uno JDY-16 蓝牙模块(我的是蓝牙4.2版本) 草帽LED(可选) 手机(我用的是安卓,苹果手机应该也可以,最近其应用商店也有App inventor(AI)伴侣) 软件: Aduino IDE或者Platfom

Firmin123456的博客 5499

单词检索【NOIP2014八校联考第4场第1试10.19】

题目小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务。 由于学校需要一些材料,校长需要在文章中检索一些信息。校长一共给了小可可N篇文章,每篇文章为一个字符串。现在,校长需要他找到这样的单词,它至少在这N篇文章中的M篇文章里出现过,且单词长度为L。可是,工作量十分庞大,但校长又急需小可可完成这项任务。 现在他向你求助,需要你编写程序完成这项艰巨的任务。样例输入: 第1行3个正整数N,M

Last_Freezen_yue的博客 767

PLS-SEM(偏最小二乘路径建模)模型拟合优度指标

PLS-SEM(偏最小二乘路径建模)是一种基于方差的分析方法,侧重于预测导向,通过迭代优化路径系数和外部权重来最大化潜变量的解释方差(R²)。其评估指标分为外部测量模型和结构模型两部分:外部测量模型关注潜变量与显变量的关系,通过标准化载荷(>0.7)、信度指标(Cronbach’s α、复合信度CR>0.7)、聚合效度(AVE>0.5)和区分效度(Fornell-Larcker标准、HTMT<0.85)来评估模型的可靠性和有效性。结构模型则检验潜变量间的因果关系,通过路径系数(β值)

wewil_lwin的博客 3230

KMP文本单词检索

文本单词检索 试题描述:要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。该设计要求可分为三个部分实现:其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,...

Ruanes的博客 1114

第2章: MMU Notifier 全局通知器的核心原理⭐

摘要 MMU Notifier机制是Linux内核中用于处理内存地址空间变化通知的关键框架。其设计遵循解耦与标准化、最小侵入性、高性能和安全性四大原则,采用三层架构实现上层应用、核心层与内存管理层的协作。框架提供两种通知模型:全局订阅的mmu_notifier和区间订阅的mmu_interval_notifier,分别适用于KVM虚拟化和GPU共享虚拟内存等不同场景。核心数据结构mmu_notifier_ops定义了设备驱动需要实现的回调函数集合,包括进程退出处理、页面老化管理、地址范围失效通知等功能。

图形/计算GPU的驱动与虚拟化技术分享园地 4561

半导体材料仿真:二维材料仿真_(1).二维材料的基本概念

在半导体材料仿真领域,二维材料因其独特的物理和化学性质而受到广泛关注。二维材料,也称为二维纳米材料,是指在二维空间(通常是平面)上具有原子级厚度的材料。这些材料的厚度通常在几个纳米甚至单个原子层的范围内,使得它们在电子、光学、热学和机械性能上表现出与传统三维材料显著不同的特性。本节将详细介绍二维材料的基本概念,包括它们的分类、结构、性质以及在半导体材料仿真中的应用。

2401_87715305的博客 1545

单词检索程序

word.h头文件#ifndef WORD_H_INCLUDED #define WORD_H_INCLUDED #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;string.h&gt; #include&lt;iostream&gt; #include&lt;algorithm&gt; #define LIST_INIT...

qq_35599937的博客 1563

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

单词检索题解

1. 单词检索 (search.pas/c/cpp) 【问题描述】 小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务。 由于学校需要一些材料,校长需要在文章中检索一些信息。校长一共给了小可可N篇文章,每篇文章为一个字符串。现在,校长需要他找到这样的单词,它至少在这N篇文章中的M篇文章里出现过,且单词长度为L。可是,工作量十分庞大,但校长又急需小可可完成这项任务。 现在他向你...

Ansicht's Blog 481

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C语言 文件单词的检索与计数

1.设计要求与分析 建立一个文本文件,每个单词不包含空行且不跨行。检索单词的出现的行数,与位置。 2.具体设计 2.1建立文本文件 2.1.1定义一个串变量 typedef struct{ char cACh[MAXSIZE]; int iLenght; }SEQSTR; 这是一个顺序串 void fileCreate ( ) { int i; SEQSTR STR;

Have a nice day. 4761

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C语言检索单词程序,C语言 文件单词的检索与计数

1.设计要求与分析建立一个文本文件,每个单词不包含空行且不跨行。检索单词的出现的行数,与位置。2.具体设计2.1建立文本文件2.1.1定义一个串变量typedef struct{char cACh[MAXSIZE];int iLenght;}SEQSTR;这是一个顺序串void fileCreate ( ){int i;SEQSTR STR;char cFileName[10],cContinue...

weixin_39866087的博客 1068

单词检索统计文件c语言,课内资源 - 使用C++实现的单词检索统计系统

一、项目简介给定一个文本文件,要求统计给定单词在文本中出现的总次数,并检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。本项目的设计要求可以分为三个部分实现:其一,建立一个文本文件,文件名由用户用键盘输入;其二,给定单词计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。...

weixin_30747571的博客 1503

文本文件单词的检索与计数c语言,文本文件单词的检索与计数

《文本文件单词的检索与计数》由会员分享,可在线阅读,更多相关《文本文件单词的检索与计数(15页珍藏版)》请在人人文库网上搜索。1、文本文件单词的检索与计数专业:软件工程 班级: 1227班 姓名: 王晓春 学号: 2012005774 同组人:王晓春 闫瑞娟 张泽磊 组长:王晓春 完成日期: 2014.6.25 一【问题描述】串是非数值处理中的主要对象,如在信息检索、文本编辑、符号处理等许多领域,...

weixin_32566055的博客 1550

单词检索统计程序(Java)

题目要求: 本项目的设计要求可以分为三个部分实现:其一,建立一个文本文件,文件名由用户用键盘输入;其二,给定单词计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。 建立文件的实现思路是: (1) 定义一个串变量; (2) 定义文本文件; (3) 输入文件名,打开该文件; (4) 循环读入文本行,写入文本文件,其过程如下: while(不是文件输入结束){ 读入一文本行至串变量; 串变量写入

空白的博客 727

使用C++实现的单词检索统计系统

一、项目简介 给定一个文本文件,要求统计给定单词在文本中出现的总次数,并检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。 本项目的设计要求可以分为三个部分实现:其一,建立一个文本文件,文件名由用户用键盘输入;其二,给定单词计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相...

demongwc的博客 1011
上一篇: 选择困难症
下一篇: 积木
ACTY
博客等级 码龄12年 21粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值