首页 > 其他 > 详细

poj 3320

时间:2020-10-30 15:05:28      阅读:42      评论:0      收藏:0      [点我收藏+]

水题

主要是发现poj一堆练这个的  不明所以 所以练练

http://poj.org/problem?id=3320

 

思路很简单  找到包含所有id的一个区间 对那个区间进行缩小  注意要count最少的出连续的个数

 

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<set>
 4 #include<map>
 5 using namespace std;
 6 const int maxn=1e6+50;
 7 
 8 int P;
 9 int idea[maxn];
10 set<int>myset;
11 map<int ,int >mymap;
12 
13 int Solve()
14 {
15     int sumIdea=myset.size();//获取总的知识点个数 
16     int start=1,end=1;
17     while(sumIdea != 0)// 寻找最短包含所有知识点区间 
18     {
19         sumIdea -= (mymap[idea[end]] == 0 ? 1:0);
20         mymap[idea[end++]]++;
21         while(mymap[idea[start]] > 1)
22             mymap[idea[start++]]--;
23     }
24     int res=end-start;
25     //end++,mymap[ a[end] ]++,并判断mymap[ a[start] ]是否大于1,如果大于,start++,直到不大于为止,并更新 res。
26     //重复 直到end>P 
27     while(end <= P)
28     {
29         mymap[idea[end++]]++;
30         while(mymap[idea[start]] > 1)
31             mymap[idea[start++]]--;
32         res=min(res,end-start);
33     }
34     return res;
35 }
36 
37 int main()
38 {
39     scanf("%d",&P);
40     for(int i=1;i <= P;++i)
41     {
42         scanf("%d",idea+i);
43         myset.insert(idea[i]);//用set去重
44         mymap[idea[i]]=0;
45     }
46     printf("%d\n",Solve());
47 }
View Code

 

poj 3320

原文:https://www.cnblogs.com/ranzhong/p/13901481.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!