码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3320 尺取法,Hash,map标记

时间:2016-08-02 23:41:39      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

1、POJ 3320 

2、链接:http://poj.org/problem?id=3320

3、总结:尺取法,Hash,map标记

  看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识点

  必须说,STL够屌。。

技术分享
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<map>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
const int N=1000100;
int p,a[N];
map<int,int>n,x;

int main()
{
    while(~scanf("%d",&p))
    {
        for(int i=1;i<=p;i++)
        {
            scanf("%d",&a[i]);
            n[a[i]]++;
        }
        int s=n.size();    //记录总类别

        int l=1,r=1,ans=INF;
        while(true)
        {
            while((r<=p)&&(x.size()<s)){    //尺取法,要满足范围要求,否则右端点移动
                x[a[r++]]++;
            }
            if(x.size()<s)break;        
            ans=min(ans,r-l);      
            x[a[l++]]--;
            if(x[a[l-1]]<=0)x.erase(a[l-1]);    //关健点,在范围内这个类别数<=0,就删去

        }
        printf("%d\n",ans);
    }

    return 0;
}
View Code

 

POJ 3320 尺取法,Hash,map标记

标签:

原文地址:http://www.cnblogs.com/sbfhy/p/5731030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!