poj 3320(尺取法)
参考资料:
[1]:挑战程序设计竞赛
题意:
一本书有 P 页,每页都有个知识点a[i],知识点可能重复,求包含所有知识点的最少的页数。
题解:
相关说明:
设以a[start]开始的最初包含所有知识点的最少连续子序列为a[start,....,end];
mymap[ a[i] ] : 知识点 a[i] 在当前最少连续子序列中出现的次数。
(1):求出所需复习的知识点总个数。
(2):求出最先包含所有知识点的最少页数a[start,........,end]。
(3):end++,mymap[ a[end] ]++,并判断mymap[ a[start] ]是否大于1,如果大于,start++,直到不大于为止,并更新 res。
(4):重复(3)过程,直到end > P。
AC代码:
#include<iostream>
#include<cstdio>
#include<set>
#include<map>
using namespace std;
const int maxn=1e6+; int P;
int idea[maxn];
set<int>myset;
map<int ,int >mymap; int Solve()
{
int sumIdea=myset.size();//步骤(1)
int start=,end=;
while(sumIdea != )//步骤(2)
{
sumIdea -= (mymap[idea[end]] == ? :);
mymap[idea[end++]]++;
while(mymap[idea[start]] > )
mymap[idea[start++]]--;
}
int res=end-start;
while(end <= P)//重复执行步骤(3)(4)
{
mymap[idea[end++]]++;
while(mymap[idea[start]] > )
mymap[idea[start++]]--;
res=min(res,end-start);
}
return res;
} int main()
{
scanf("%d",&P);
for(int i=;i <= P;++i)
{
scanf("%d",idea+i);
myset.insert(idea[i]);//set去重
mymap[idea[i]]=;
}
printf("%d\n",Solve());
}
#include<iostream>
#include<cstdio>
#include<set>
#include<map>
using namespace std;
const int maxn=1e6+; int P;
int idea[maxn];
set<int>myset;
map<int ,int >mymap; int Solve()
{
int sumIdea=myset.size();
int start=,end=;
int total=;
int res=;
while()
{
while(end <= P && total < sumIdea)
total += ((mymap[idea[end++]]++) == ? :); if(total < sumIdea)//如果 total < sumIdea,说明跳出上一个while()的条件为 end > P
break;
res=(res == || res > end-start ? end-start:res);
if(--mymap[idea[start++]] == )
total--;
}
return res;
} int main()
{
scanf("%d",&P);
for(int i=;i <= P;++i)
{
scanf("%d",idea+i);
myset.insert(idea[i]);//set去重
mymap[idea[i]]=;
}
printf("%d\n",Solve());
}
挑战程序设计竞赛
poj 3320(尺取法)的更多相关文章
- POJ 3320 尺取法,Hash,map标记
1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...
- POJ 3320 尺取法(基础题)
Jessica's Reading Problem Description Jessica's a very lovely girl wooed by lots of boys. Recently s ...
- POJ 3320 (尺取法+Hash)
题目链接: http://poj.org/problem?id=3320 题目大意:一本书有P页,每页有个知识点,知识点可以重复.问至少连续读几页,使得覆盖全部知识点. 解题思路: 知识点是有重复的, ...
- A - Jessica's Reading Problem POJ - 3320 尺取
A - Jessica's Reading Problem POJ - 3320 Jessica's a very lovely girl wooed by lots of boys. Recentl ...
- poj 2100(尺取法)
Graveyard Design Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 6107 Accepted: 1444 ...
- POJ 2566 尺取法(进阶题)
Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4297 Accepted: 1351 Spe ...
- POJ 3320 Jessica‘s Reading Problem(哈希、尺取法)
http://poj.org/problem?id=3320 题意:给出一串数字,要求包含所有数字的最短长度. 思路: 哈希一直不是很会用,这道题也是参考了别人的代码,想了很久. #include&l ...
- 尺取法 POJ 3320 Jessica's Reading Problem
题目传送门 /* 尺取法:先求出不同知识点的总个数tot,然后以获得知识点的个数作为界限, 更新最小值 */ #include <cstdio> #include <cmath> ...
- POJ 3320 Jessica's Reading Problem 尺取法
Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The fina ...
随机推荐
- LVM常规操作记录梳理(扩容/缩容/快照等)
基本介绍Linux用户安装Linux 操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间.随着 Linux的逻辑盘卷管理功能的出现,这些问题都迎刃而解, l ...
- PHP从入门到精通(二)
PHP从入门到精通 之PHP中的函数 各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持.PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新 ...
- ACM-ICPC 2017 Asia Urumqi:A. Coins(DP)
挺不错的概率DP,看似基础,实则很考验扎实的功底 这题很明显是个DP,为什么???找规律或者算组合数这种概率,N不可能给的这么友善... 因为DP一般都要在支持N^2操作嘛. 稍微理解一下,这DP[i ...
- 总结and规划
不知不觉中又过去了一年,马上就要读研究生了,因此有必要对自己进行必要的总结,以及对自己有个良好的规划. 首先,描述自己当前的心情——对未来充满了恐惧和焦虑. 马上大学就要毕业了,回首经历的大学生涯,似 ...
- Java开发异常
1.org.apache.catalina.LifecycleException 报错信息如下: 警告: Error during context [/wxqhbcloud] restart org. ...
- 后端返回值以json的格式返回,前端以json格式接收
以随便一个类为例子:这个例子是查询企业主营类别前5事项 一.以json数组的格式返回到前端中 (1)后端将结果绑定到param中,然后将结果以为json数组的格式返回到前端 /** * 查询企业主营类 ...
- b总结
Beta 答辩总结 评审表 组名 格式 内容 ppt 演讲 答辩 总计 天机组 15 15 13 15 14 72 PMS 16 16 15 16 16 79 日不落战队 16 17 17 17 17 ...
- 机器学习算法(KNN)
KNN简介 KNN(k-NearestNeighbor)算法的思想总结一下:就是在数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K ...
- Microsoft Orleans构建高并发、分布式的大型应用程序框架
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- 二维数组转化为一维数组 contact 与apply 的结合
将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...