题目地址: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 }