题目地址:http://codeforces.com/contest/978/problem/A

 

题解:给一串长度为n的数组,然后删去相同的数字(从右往左)。

 

方法:题目n和数组ai给的范围都很小,所以可以放一个vis[1500]的数组表示1~1000内的数字是否被访问过。从右到左倒着访问,然后再把out数组倒着输出。

 

代码:(代码较丑,欢迎大佬们批评指正)

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<string>
 6 #include<iostream>
 7 #include<map>
 8 #include<vector>
 9 #include<set>
10 #include<queue>
11 using namespace std;
12 const int inf = 0x3f3f3f3f;
13 int main()
14 {
15     int n;
16     int a[60], vis[1500] = {0},out[60];
17     scanf("%d", &n);
18     for (int i = 0; i < n; i++)
19     {
20         scanf("%d", &a[i]);
21     }
22     int len = 0;
23     for (int i = n - 1; i >= 0; i--)
24     {
25         if (vis[a[i]] == 0)
26         {
27             out[len] = a[i];
28             len++;
29             vis[a[i]] = 1;
30         }
31     }
32     printf("%d\n", len);
33     for (int i = len-1 ; i >= 0; i--)
34     {
35         printf("%d", out[i]);
36         if (i != 0)
37             printf(" ");
38         else
39             printf("\n");
40     }
41     return 0;
42 }