Unique Snowflakes UVA - 11572
考察:STL
错误思路:
用STL的set看是否重复,如果有重复就erase 起始迭代器直到不重复为止
该思路错在set自动排序啊啊!!!
应该可以用C++11的unordered_set.但是这道题可以只用set解
温故知识:set的erase元素可以删除迭代器所指向元素,也可以直接删除匹配的元素.同理map也可以
1 #include <iostream> 2 #include <set> 3 #include <queue> 4 #include <vector> 5 using namespace std; 6 int main() 7 { 8 int T,n; 9 scanf("%d",&T); 10 while(T--) 11 { 12 set<int> s; vector<int> v; 13 int len = 0; 14 scanf("%d",&n); 15 for(int i=1;i<=n;i++) 16 { 17 int x; scanf("%d",&x); 18 v.push_back(x); 19 } 20 for(int i=0,l=0;i<n;i++) 21 { 22 while(s.count(v[i])) 23 s.erase(v[l++]); 24 s.insert(v[i]); 25 len = max(i-l+1,len); 26 } 27 printf("%d\n",len); 28 } 29 return 0; 30 }