zoukankan      html  css  js  c++  java
  • POJ 3320 尺取法,Hash,map标记

    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
    ",ans);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    透过书本了解HTML5
    Seam性能讨论
    Maven依赖管理
    Tapestry
    为HTML5的未来制定学习计划
    后缀数组
    HDU 1042(大数)
    教你理解复杂的C/C++声明
    编程修养
    平衡二叉树
  • 原文地址:https://www.cnblogs.com/sbfhy/p/5731030.html
Copyright © 2011-2022 走看看