1779: 无法言表
时间限制: 1 Sec 内存限制: 128 MB提交: 303 解决: 113
[ 提交][ 状态][ 讨论版]
题目描述
给出N个数,要求把其中的重复的去掉,只保留第一次出现的数.1 <= N <= 50000,给出的数在32位有符号整数范围内。
输入
第一行T(T<=10),接下来一个数n,接下来n个数
输出
Case #x: y1,y2,...,x是测试编号从1开始,y_i表示答案
样例输入
2111 2 18 3 3 19 2 3 6 5 461 2 3 4 5 6
样例输出
Case #1: 1 2 18 3 19 6 5 4Case #2: 1 2 3 4 5 6
提示
来源
这道题数据太多,不能用暴力法,为了不输出重复的数据,可以考虑STL里的set函数
set的用法如下:
扫描二维码关注公众号,回复:
1681812 查看本文章
begin() ,返回set容器的第一个元素
end() ,返回set容器的最后一个元素
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空
max_size() ,返回set容器可能包含的元素最大个数
size() ,返回当前set容器中的元素个数
rbegin ,返回的值和end()相同
rend() ,返回的值和rbegin()相同
count() 用来查找set中某个某个键值出现的次数。
erase(iterator) ,删除定位器iterator指向的值
erase(first,second),删除定位器first和second之间的值
erase(key_value),删除键值key_value的值
find() ,返回给定值值得定位器,如果没找到则返回end()。
set用法来源于Donn-you博主
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include<stdio.h>
#include<set>
#include<string.h>
using
namespace
std;
int
main(
void
)
{
int
tp,t,n,k=1;
set<
int
> a;
scanf
(
"%d"
,&t);
while
(t--)
{
a.clear();
scanf
(
"%d"
,&n);
for
(
int
i=0;i<n;i++)
{
scanf
(
"%d"
,&tp);
if
(i==0)
{
a.insert(tp);
printf
(
"Case #%d: %d"
,k++,tp);
}
else
{
if
(a.count(tp)==0)
{
a.insert(tp);
printf
(
" %d"
,tp);
}
}
}
printf
(
"\n"
);
}
return
0;
}
|