题目链接:poj-3320
问题:杰西卡是一个非常可爱的女孩,受到许多男孩的追捧。最近她有个问题。期末考试快到了,但她几乎没花什么时间。如果她想通过考试,她必须掌握一本厚厚的教科书中包含的所有思想。那本教科书的作者和其他作者一样,对这些观点极为挑剔,因此有些观点被多次提及。杰西卡认为,如果她能把每个想法至少读一次,她就能通过考试。她决定只读这本书的一个连续部分,其中包含了整本书涵盖的所有思想。当然,子手册应该尽可能薄。
一个非常勤劳的男孩为她手工索引了杰西卡教科书的每一页,每一页都有什么想法,因此他的求爱取得了很大的进展。这里你来拯救你的皮肤**:给定索引,帮助杰西卡决定她应该阅读哪一部分。为了方便起见,每个想法都用一个ID编码,ID是一个非负整数。**
输入:
输入的第一行是一个整数P(1≤ P≤ 1000000),这是杰西卡教科书的页数。第二行包含P个非负整数,描述每页的内容。第一个整数是第一页的内容,第二个整数是第二页的内容,依此类推。您可以假设出现的所有整数都可以很好地适合有符号32位整数类型。
题意:一本书有 P 页,每页都有a[ i ]个知识点,知识点可能重复,求最少的连续页数来覆盖所有知识点。
问题分析:
输入数组中数字即为该页中,知识点的个数,当俩页上的知识点数目相同时,即两页上的知识点也是一样的。
1.首先使用集合set对数组元素去重,得到不重复元素的个数
2.尺取法的使用
如果一个区间的子区间满足条件,那么在区间推进到该处时,右端点会固定,左端点会向右移动到其子区间,且其子区间会是更短的,只是需要存储所选取的区间的知识点的数量,那么使用map进行映射以快速判断是否所选取的页数是否覆盖了所有的知识点。
#include<iostream>
#include<cstring>