当前位置: 首页 > news >正文

洛谷 P3879 阅读理解

题目描述

英语老师留了 N 篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过。

输入格式

第一行为整数 N ,表示短文篇数,其中每篇短文只含空格和小写字母。

按下来的 N 行,每行描述一篇短文。每行的开头是一个整数 L ,表示这篇短文由 L 个单词组成。接下来是 L 个单词,单词之间用一个空格分隔。

然后为一个整数 M ,表示要做几次询问。后面有 M 行,每行表示一个要统计的生词。

输出格式

对于每个生词输出一行,统计其在哪几篇短文中出现过,并按从小到大输出短文的序号,序号不应有重复,序号之间用一个空格隔开(注意第一个序号的前面和最后一个序号的后面不应有空格)。如果该单词一直没出现过,则输出一个空行。

输入输出样例

输入 #1

3
9 you are a good boy ha ha o yeah
13 o my god you like bleach naruto one piece and so do i
11 but i do not think you will get all the points
5
you
i
o
all
naruto

输出 #1

1 2 3
2 3
1 2
3
2

说明/提示

对于 30% 的数据, 1≤M≤10^3 。

对于 100% 的数据,1≤M≤10^4,1≤N≤10^3 。

每篇短文长度(含相邻单词之间的空格)5×10^3 字符,每个单词长度 ≤20 字符。

每个测试点时限 2 秒。

解题思路

本题可以采用链地址法解决哈希冲突,采用二维结构体储存哈希值,结构体竖直方向为N篇阅读理解,水平方向为每个单词字符串转换数字映射到的位置采用链表储存,对于m个单词在n篇阅读理解里面查找就是通过下标查找,判断能否找到。

AC代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct linknode {//结构体存储n篇阅读理解char ss[21];struct linknode* next;
}a[1001][1997], * p, * tt, * q;
int n, m, d;
char s[21];
int haxi()//求对应的关键字
{int k = strlen(s), ans = 0;for (int i = 0; i < k; i++)ans = (ans * 26 + s[i]) % 1997;return ans;
}
int main()
{int i;scanf("%d", &n);for (i = 1; i <= n; i++)//初始化for (int j = 0; j < 1997; j++)a[i][j].next = NULL;for (int i = 1; i <= n; i++)//输入单词并储存在结构体中{scanf("%d", &d);while (d--){scanf("%s", s);int t = haxi();q = (struct linknode*)malloc(sizeof(struct linknode));strcpy(q->ss, s);//头插法q->next = a[i][t].next; a[i][t].next = q;}}scanf("%d", &m);while (m--){scanf("%s", s);int t = haxi();//找到单词对应的下标for (i = 1; i <= n; i++){p = a[i][t].next;while (p != NULL){if (strcmp(p->ss, s) == 0)//如果找到这个单词{printf("%d ", i);break;}p = p->next;}}printf("\n");}for (i = 1; i <= n; i++)//释放内存for (int j = 0; j < 1997; j++){p = a[i][j].next;while (p != NULL){tt = p;p = p->next;free(tt);}}return 0;
}

相关文章:

  • 重学Java 18.学生管理系统项目
  • Windows 获取内存 API 汇总及使用方法
  • Python编程技巧 – 装饰器
  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO
  • 深入理解java虚拟机---自动内存管理
  • 一.重新回炉Spring Framework: 理解Spring IoC
  • Python第十九章(模块)
  • PyCharm 新建目录 (directory or folder)
  • JavaScript 设计模式之组合模式
  • ubuntu 22.04 图文安装
  • Java使用Redis实现分页功能
  • 微服务中4种应对跨库Join的思路
  • 如何选择最适合的图纸加密软件?用户体验及性价比
  • 同一台宿主机上虚拟机CPU资源分配方式介绍
  • 【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【css3】浏览器内核及其兼容性
  • 2017年终总结、随想
  • C# 免费离线人脸识别 2.0 Demo
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ESLint简单操作
  • JavaWeb(学习笔记二)
  • miaov-React 最佳入门
  • Python打包系统简单入门
  • Spring声明式事务管理之一:五大属性分析
  • sublime配置文件
  • Swoft 源码剖析 - 代码自动更新机制
  • 创建一个Struts2项目maven 方式
  • 大主子表关联的性能优化方法
  • 回顾2016
  • 前端之Sass/Scss实战笔记
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 算法系列——算法入门之递归分而治之思想的实现
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 小程序button引导用户授权
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #android不同版本废弃api,新api。
  • #HarmonyOS:基础语法
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (python)数据结构---字典
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)nsfocus-绿盟科技笔试题目
  • (转)菜鸟学数据库(三)——存储过程
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • [ C++ ] STL---stack与queue
  • [2669]2-2 Time类的定义
  • [android] 天气app布局练习
  • [C#] 基于 yield 语句的迭代器逻辑懒执行