传送门:Problem 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(尺取法)的更多相关文章

  1. POJ 3320 尺取法,Hash,map标记

    1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...

  2. POJ 3320 尺取法(基础题)

    Jessica's Reading Problem Description Jessica's a very lovely girl wooed by lots of boys. Recently s ...

  3. POJ 3320 (尺取法+Hash)

    题目链接: http://poj.org/problem?id=3320 题目大意:一本书有P页,每页有个知识点,知识点可以重复.问至少连续读几页,使得覆盖全部知识点. 解题思路: 知识点是有重复的, ...

  4. 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 ...

  5. poj 2100(尺取法)

    Graveyard Design Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 6107   Accepted: 1444 ...

  6. POJ 2566 尺取法(进阶题)

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4297   Accepted: 1351   Spe ...

  7. POJ 3320 Jessica‘s Reading Problem(哈希、尺取法)

    http://poj.org/problem?id=3320 题意:给出一串数字,要求包含所有数字的最短长度. 思路: 哈希一直不是很会用,这道题也是参考了别人的代码,想了很久. #include&l ...

  8. 尺取法 POJ 3320 Jessica's Reading Problem

    题目传送门 /* 尺取法:先求出不同知识点的总个数tot,然后以获得知识点的个数作为界限, 更新最小值 */ #include <cstdio> #include <cmath> ...

  9. 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 ...

随机推荐

  1. B. Forgery

    链接 [http://codeforces.com/contest/1059/problem/B] 题意 要伪造医生签名,先给你医生的签名nm的网格'.'表示空白',#'表示墨水,你的笔可以这么画以一 ...

  2. git心得与总结

    任何文件在Git库中都有四种状态:未跟踪状态untracked.跟踪状态tracked(未修改状态unmodified.已修改状态modified.暂存状态staged),由于文件的上述四种状态,在使 ...

  3. input file multiple 批量上传文件

    这几天维护系统,有一个批量上传文件功能,出现了一点小问题 我的笔记本选择要上传的文件很正常 但在测试环境上,别人的电脑上,选择上传文件之后 一开始,以为是代码问题,网上找了很多的资料,但还是没用,然后 ...

  4. Alpha冲刺随笔集

    作业地址 项目名称:高校实验室信息化管理系统 团队成员 学号 姓名 031602636 许舒玲 031602237 吴杰婷 031602220 雷博浩 031602634 吴志鸿 181600107 ...

  5. PAT 1046 划拳

    https://pintia.cn/problem-sets/994805260223102976/problems/994805277847568384 划拳是古老中国酒文化的一个有趣的组成部分.酒 ...

  6. CentOS7 卸载mariadb 安装mysql的过程:

    1. 检查安装的mariadb rpm -qa |grep mariadb 得到已经安装的安装包 mariadb-libs-5.5.56-2.el7.x86_64mariadb-devel-5.5.5 ...

  7. parent()、parents()和parentsUntil()的区别

    1.parent() 返回被选元素的直接父元素,该方法只会向上一级对 DOM 树进行遍历: 2.parents() 返回被选元素的所有祖先元素,它一路向上直到文档的根元素 (<html>) ...

  8. 解决问题的方法=>现象-->原因-->方案-->方案的优缺点

    解决问题的方法=>现象-->原因-->方案-->方案的优缺点

  9. BZOJ4832[Lydsy1704月赛]抵制克苏恩——期望DP

    题目描述 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q 同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 30 点血量的 ...

  10. BZOJ1047[HAOI2007]理想的正方形——二维ST表

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...