博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3320 (尺取法+Hash)
阅读量:6278 次
发布时间:2019-06-22

本文共 747 字,大约阅读时间需要 2 分钟。

题目链接

题目大意:一本书有P页,每页有个知识点,知识点可以重复。问至少连续读几页,使得覆盖全部知识点。

解题思路

知识点是有重复的,因此需要统计不重复元素个数,而且需要记录重复个数。

最好能及时O(1)反馈不重复的个数。那么毫无疑问,得使用Hash。

推荐使用map,既能Hash,也能记录对于每个key的个数。

 

尺取的思路:

①不停扩展R,并把扫过知识点丢到map里,直到map的size符合要求。

②更新结果。

②L++,map里的对应key(a[l++])的个数-1,相当于移出这页。

如果对应的key的个数<=0,则应该erase掉这个key,防止map::size()的误判。

 

#include "cstdio"#include "map"using namespace std;int a[1000005];int main(){    //freopen("in.txt","r",stdin);    int n,s,l=1,r=1,ans=0x3f3f3f3f;    scanf("%d",&n);    map
Hash,x; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); Hash[a[i]]++; } s=Hash.size(); while(true) { while(x.size()
<=n) x[a[r++]]++; if(x.size()

 

13593020 Accepted 1520K 422MS 549B 2014-11-03 00:30:01

转载地址:http://rkfva.baihongyu.com/

你可能感兴趣的文章
virtualbox 笔记
查看>>
Git 常用命令
查看>>
驰骋工作流引擎三种项目集成开发模式
查看>>
SUSE11修改主机名方法
查看>>
jdk6.0 + Tomcat6.0的简单jsp,Servlet,javabean的调试
查看>>
Android:apk签名
查看>>
2(2).选择排序_冒泡(双向循环链表)
查看>>
MySQL 索引 BST树、B树、B+树、B*树
查看>>
微信支付
查看>>
CodeBlocks中的OpenGL
查看>>
短址(short URL)
查看>>
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>