ZR#996

ZR#996

解法:

若删除长度为 $ x $ 的子串后序列中没有相同元素,那么一定有至少一个长度为 $ x+1 $ 的子串,删除它后序列中也没有相同元素。

CODE:

#include <iostream> 
#include <cstdio> 
#include <cstring> 
#include <algorithm> 
#include <map> 

using namespace std; 

#define LL long long
#define INF 2147483647
#define N 2010

int a[N],n,ans = INF; 
map<int,int> Hash; 

int main() {
    scanf("%d",&n); 
    for(int i = 1 ; i <= n ; i++)
        scanf("%d",&a[i]); 
    int cnt = n; 
    while(cnt >= 1) {
        if(Hash[a[cnt]] >= 1) break; 
        Hash[a[cnt]]++; 
        cnt--; 
    }
    for (int i = 1; i <= n; i++) {
        ans = min(ans, cnt - i + 1); 
        Hash[a[i]]++; 
        while (Hash[a[i]] >= 2 && cnt <= n) {
            cnt++; 
            Hash[a[cnt]]--; 
        }
        if (Hash[a[i]] >= 2)break; 
    }
    printf("%d\n", ans); 
    //system("pause");
    return 0; 
}
posted @ 2019-09-08 20:07  西窗夜雨  阅读(215)  评论(0编辑  收藏  举报