Poj3320 题目链接:http://poj.org/problem?id=3320
顺利通过。
顺便提一下:
POJ不支持 #include <bits/stdc++.h>
这一题如果用流输入cin 会超时。 改用scanf()完美通过
13 1 2 2 3 4 1 2 3 4 2 3 2 1
//#include <bits/stdc++.h>
#include <map>
#include <set>
#include<iostream>
#include <stdio.h>
#define LL long long int
using namespace std;
const int MM=1000001;
int P;
int a[MM];
void solve(){
set<int> all;
for(int i=1;i<=P;i++){
all.insert(a[i]);
}
int N = all.size();
map<int,int> knowledge;
int s=0; int t=0; int num=0; // num为知识点覆盖知识点的数量
int rec=P;
for(;;){
// cout << "s:" << s << "t:" << t <<endl;
while( t<P && num< N ){
t++;
if( knowledge[ a[t] ] == 0 ) {
num++;
}
knowledge[ a[t] ]++;
}
if(num<N) break;
//cout << "s:" << s << "t:" << t <<endl;
rec= min(rec, t-s);
s++;
knowledge[ a[s] ]--;
if( knowledge[ a[s] ] == 0 ){ num--; }
// cout << "s:" << s << "t:" << t <<endl;
// map<int,int >::iterator it ;
// for( it=knowledge.begin() ; it!=knowledge.end(); it++)
// cout << it->first << "||"<<it->second << endl << "***";
// cout << endl<< endl;
}
cout << rec;
}
int main()
{
cin >> P;
for(int i=1;i<=P;i++){
scanf("%d",&a[i]);
}
solve();
return 0;
}