uva 11572 唯一的雪花
Posted jack_yyc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva 11572 唯一的雪花相关的知识,希望对你有一定的参考价值。
题目大意:
一个数列a,找到一个尽量长的连续子序列 ax 到 ay,使得该系列中没有相同的元素,求数列长度
思路:
滑动窗口
每次判断窗口内是否有重复即可
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstdlib> 6 #include<cstring> 7 #include<queue> 8 #include<vector> 9 #define inf 2147483611 10 #define ll long long 11 #define MAXN 1010101 12 #define MOD 13 using namespace std; 14 inline ll read() 15 { 16 ll x=0,f=1; 17 char ch;ch=getchar(); 18 while(!isdigit(ch)) {if(ch==‘-‘) f=-1;ch=getchar();} 19 while(isdigit(ch)) {x=x*10+ch-‘0‘;ch=getchar();} 20 return x*f; 21 } 22 int l,r,ans,n,a[MAXN],hash[MAXN]; 23 int main() 24 { 25 n=read(); 26 l=r=1; 27 for(int i=1;i<=n;i++) a[i]=read(); 28 while(r<n) 29 { 30 while(r<n) 31 { 32 if(!hash[a[r+1]]) hash[a[r++]]++; 33 else break; 34 } 35 ans=max(ans,r-l+1); 36 while(hash[a[r+1]]) {hash[a[l++]]--;} 37 } 38 printf("%d",ans); 39 }
以上是关于uva 11572 唯一的雪花的主要内容,如果未能解决你的问题,请参考以下文章
UVa 11572 Unique Snowflakes 算法分析
(白书训练计划)UVa 11572 Unique Snowflakes(窗体滑动法)