7_6_K题 Jessica's Reading Problem题解[POJ 3320](尺取)

来源:互联网 发布:java判断字符等于空格 编辑:程序博客网 时间:2024/06/06 09:00

题目链接

简单题意

一本书有几个知识点,一页有一个,问最少连续读几页书可以读到所有的知识点

思路

直接尺取(TwoPoints),然后记录一下最短的区间长度就可以了。

代码

#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <map>using namespace std;const int maxn = 1e6+5;map<int, int>M;int page[maxn];int cnt =0;int main(){    int n;    while(~scanf("%d", &n)){        for(int i = 0; i < n ; i++){            scanf("%d",&page[i]);            M[page[i]] = 0;        }        cnt = 0;        int len = n;        int i = 0 ,j = 0;        while(i < n && j < n){            if(!M[page[j]]) cnt ++;            M[page[j]]++;            while(M[page[i]] != 1){                M[page[i]]--;                i++;            }            if(cnt == M.size()){                len = min(len,j-i+1);                if(M[page[i]] == 1) cnt--;                M[page[i]]--;                i++;            }            j++;        }        printf("%d\n",len);    }    return 0;}
0 0