算法题目——读书知识点统计问题(POJ-3320)(尺取法)

博客介绍了如何利用尺取法解决一道算法题目,内容涉及一本教科书的知识点统计。杰西卡需要找到最少的连续页数来覆盖书中所有独特的知识点,输入数据包括书的页数和每页知识点ID,通过集合去重得到唯一知识点数量,然后应用尺取法和映射策略找到最短的连续页段。
摘要由CSDN通过智能技术生成

题目链接:poj-3320
在这里插入图片描述
问题:杰西卡是一个非常可爱的女孩,受到许多男孩的追捧。最近她有个问题。期末考试快到了,但她几乎没花什么时间。如果她想通过考试,她必须掌握一本厚厚的教科书中包含的所有思想。那本教科书的作者和其他作者一样,对这些观点极为挑剔,因此有些观点被多次提及。杰西卡认为,如果她能把每个想法至少读一次,她就能通过考试。她决定只读这本书的一个连续部分,其中包含了整本书涵盖的所有思想。当然,子手册应该尽可能薄。

一个非常勤劳的男孩为她手工索引了杰西卡教科书的每一页,每一页都有什么想法,因此他的求爱取得了很大的进展。这里你来拯救你的皮肤**:给定索引,帮助杰西卡决定她应该阅读哪一部分。为了方便起见,每个想法都用一个ID编码,ID是一个非负整数。**

输入:
输入的第一行是一个整数P(1≤ P≤ 1000000),这是杰西卡教科书的页数。第二行包含P个非负整数,描述每页的内容。第一个整数是第一页的内容,第二个整数是第二页的内容,依此类推。您可以假设出现的所有整数都可以很好地适合有符号32位整数类型。

题意:一本书有 P 页,每页都有a[ i ]个知识点,知识点可能重复,求最少的连续页数来覆盖所有知识点。
问题分析:
输入数组中数字即为该页中,知识点的个数,当俩页上的知识点数目相同时,即两页上的知识点也是一样的。
1.首先使用集合set对数组元素去重,得到不重复元素的个数
2.尺取法的使用
如果一个区间的子区间满足条件,那么在区间推进到该处时,右端点会固定,左端点会向右移动到其子区间,且其子区间会是更短的,只是需要存储所选取的区间的知识点的数量,那么使用map进行映射以快速判断是否所选取的页数是否覆盖了所有的知识点。

#include<iostream>
#include<cstring>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值