poj3320Jessica's Reading Problem(尺取法)

地址:http://poj.org/problem?id=3320
题意:挑战上关于尺取的第二道例题。第一次写超时了,后来和答案比较了一下,可能是频繁调用stl的函数,导致超时了。
题目很水,但是还是学到了一点能够少的调用stl的函数还是尽量少用,别用着用着就卡时间了.
下面是ac代码:

#include 
#include 
#include 
using namespace std;
const int maxn=1e6+5;
int a[maxn];
int Count=0;
int main()
{
    map<int,int>mp;
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        if(mp[a[i]]==0) Count++;
        mp[a[i]]++;
    }
    int ans=0;
    mp.clear();
    int res=n+1;
    int k=1;
    int i=1;
    while(1)
    {
        while(i<=n&&ansif(mp[a[i]]==0) ans++;
            mp[a[i++]]++;
        }
        if(ansbreak;
        res=min(res,i-k);
        mp[a[k]]--;
        if(mp[a[k]]==0) ans--;
        k++;
    }
    printf("%d\n",res);
    return 0;
}

你可能感兴趣的:(ACM_尺取法)