Uva11572-Unique Snowflakes(滑动窗口)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva11572-Unique Snowflakes(滑动窗口)相关的知识,希望对你有一定的参考价值。
Means:
给你一串数列,问你这串数列的子串内没有重合的数,这串子串最大是多少。
Solve:
滑动窗口问题,设置两个指针l , r为起点,如果满足要求r++,不满足的话删除左区间元素,直到r遍历完数列
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define CLR(x , v) memset(x , v , sizeof(x)) 4 static const int MAXN = 1e6 + 10; 5 int t , n; 6 int data[MAXN]; 7 set<int> s; 8 int ans = 0; 9 int main() 10 { 11 scanf("%d" , &t); 12 while(t--) 13 { 14 CLR(data , 0); 15 s.clear(); 16 ans = 0; 17 scanf("%d" , &n); 18 for(int i = 1 ; i <= n ; ++i) 19 scanf("%d" , data + i); 20 int l = 1 , r = 1; 21 while(r <= n) 22 { 23 while(r <= n && !s.count(data[r])) 24 s.insert(data[r++]); 25 int si = s.size(); 26 ans = max(ans , si); 27 s.erase(data[l++]); 28 } 29 printf("%d\\n" , ans); 30 } 31 }
以上是关于Uva11572-Unique Snowflakes(滑动窗口)的主要内容,如果未能解决你的问题,请参考以下文章
(白书训练计划)UVa 11572 Unique Snowflakes(窗体滑动法)
Uva11572-Unique Snowflakes(滑动窗口)
UVa 11572 Unique Snowflakes 算法分析