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 }

 

posted @ 2021-01-17 17:07  acmloser  阅读(36)  评论(0编辑  收藏  举报