P1059 明明的随机数(排序 标记 set)

mac2026-05-27  3

题目链接:P1059 明明的随机数

题解: 标记一下就行,注意vis数组要大点,数字可能不只是三位数;
参考代码1.0: sort加标记
#include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> #define INF 0x3f3f3f3f #define MAX 20010 using namespace std; int N, s[110], res; bool vis[1010], vs[1010]; int main() { cin >> N; for(int i = 0; i < N; i++) cin >> s[i]; sort(s, s + N); for(int i = 0; i < N; i++) { if(vis[s[i]]) continue; res ++; vis[s[i]] = true; } cout << res << endl; for(int i = 0; i < N; i++) { if(vs[s[i]]) continue; cout << s[i] <<" "; vs[s[i]] = true; } return 0; }
参考代码2.0: STL的set,自动排序,自动去重
#include <set> #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> #define INF 0x3f3f3f3f #define MAX 20010 using namespace std; set<int> s; int N, a; int main() { cin >> N; for(int i = 0; i < N; i++) cin >> a, s.insert(a); cout << s.size() << endl; for(set<int>::iterator it = s.begin(); it != s.end(); it++) { cout << *it <<" "; } return 0; }
最新回复(0)