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\n",ans); } return 0; }