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 ...
随机推荐
- Gitlab环境快速部署(RPM包方式安装)
之前梳理了一篇Gitlab的安装CI持续集成系统环境---部署Gitlab环境完整记录,但是这是bitnami一键安装的,版本比较老.下面介绍使用rpm包安装Gitlab,下载地址:https://m ...
- Shell学习笔记二
一.调试脚本 调试功能是每一种编程语言都应该实现的重要特性之一,当出现一些始料未及的情况时,用它来生成脚本运行信息.调试信息可以帮你弄清楚是什么原因使得程序发生崩溃或行为异常.每位系统程序员都应该了解 ...
- hots团队项目终审报告
一.团队成员: 徐钧鸿: 1994年1月19日生人,摩羯座最后一天.所以有摩羯的强迫症和水瓶古怪的性格 暂且算队长吧…… 高中的时候因为兴趣学了竞赛,于是就入坑了,于是就来北航学计算机了 兴趣面很广, ...
- CSS编码规则
/* 和HTML一样使用两个空格来代替制表符 */ div { /* 为了代码的易读性,在每个声明块的左花括号前添加一个空格 */' padding: 15px; /* 每个声明语句的:后应该插入一个 ...
- Markdown页内跳转实现方法
目录 Markdown页内跳转实现方法 HTML锚点跳转 生成目录 Markdown页内跳转实现方法 [时间:2017-02] [状态:Open] [关键词:markdown,标记语言,页内跳转,ht ...
- sqlalchemy 使用pymysql连接mysql 1366错误
一.错误情况 mysql 5.7.2 \python35\lib\site-packages\pymysql\cursors.py:166: Warning: (1366, "Incorre ...
- Eclipse频繁崩溃问题待解决
---------------------------Eclipse---------------------------Java was started but returned exit code ...
- 软件工程_2nd weeks
本周上课没有板书,都由老师口头叙述 因此有的笔记记得不是很全,幸好有郑蕊师姐发布的课堂笔记,很好的梳理上课的内容~ 1.根据老师上课给的建议,进行了深刻的思考和反思 1.1 作为一个学硕研究生,这门课 ...
- 关于EXCEL if、countif 在查找数据的用法
最近被其他部门的同事教导使用excel.突然觉得以前用代码切来切去的东西,和频繁比对的数据原来是用excel就能那么方便的算出,瞬间感觉打开了新世界的大门. 先说if和countif结合使用,来判断一 ...
- Java 数组实现 stack
首先定义 IStack package cn.com.example.stack; /** * Created by Jack on 2017/3/8. */ public interface ISt ...