rqnoj 1 去重+排序

来源:互联网 发布:手机fm发射器软件 编辑:程序博客网 时间:2024/04/27 14:27
题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有2行,第1行为1个正整数,表示所生成的随机数的个数:

N

第2行有N个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。


10
20 40 32 67 40 20 89 300 400 15


8
15 20 32 40 67 89 300 400



很简单的一道题,set模板类题。不过这个用优先级队列来做倒是一种新思路。把优先级定义为大小顺序,出队的时候比较和它之前的一样不一样,不一样才出队并且累加数目。

#include <stdio.h>#include <iostream>#include <queue>#include <vector>#include <set>using namespace std;/*优先级队列*/{int operator () (int &a, int &b){return a > b;}};priority_queue <int, vector<int>, cmp> q;int main(){int n, i, x, j, a[105], sum = 0, pre;scanf("%d", &n);for(i = 0 ; i < n ; i++){    scanf("%d", &x);    q.push(x);}pre = 2000;i = 0;while(!q.empty()){x = q.top();q.pop();if(x != pre){sum ++;a[i] = x;pre = x;i++;}}printf("%d\n", sum);for(j = 0 ; j < i ; j++)    printf("%d ", a[j]);printf("\n");return 0;}/*set*/ set <int> s;set <int> ::iterator it;int main(){int n, i, x;scanf("%d", &n);for(i = 0 ; i < n ; i++){scanf("%d", &x);s.insert(x);}printf("%d\n", s.size());for(it = s.begin() ; it != s.end() ; it ++)   printf("%d ", *it);printf("\n");return 0;}


0 0
原创粉丝点击