1 条题解

  • 0
    @ 2025-8-24 21:20:28

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chenxi2009
    身如柳絮随风扬。|粉福见专栏。|红名且勾支持互

    搬运于2025-08-24 21:20:27,当前版本为作者最后更新于2025-08-08 21:25:12,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    思路

    本题考查知识点为排序或 STL 常用函数。

    题意为给输入的数列排序并去重,输出之后的数列。本题解重点介绍 STL 函数 sort 和 unique。

    给一个整数数列,我们可以使用 sort 函数对它排序,sort 函数的调用方式为 sort(begin_place,end_place);,其中 begin_placeend_place 表示排序数组的开头位置和结尾位置。注意:此处的结尾位置为最后一个元素的位置的后一个位置,也即数列后的第一个空位置。STL 系列函数的“结束位置”都是这么定义的。

    对于一个有序的数组,我们可以使用 unique 函数对它去重。unique 函数的调用方式为 unique(begin_place,end_place),如果数组里有 kk 个不同的值,那么调用后数组的前 kk 个位置将会是这些不同的值有序排列,重复的值会被移动到数组后面。

    现在有个问题:我们怎么知道 kk 是多少呢?不用担心,unique 函数是有返回值的!它的返回值是指向这 kk 个数的下一个位置的指针,所以用这个指针减去 begin_place 得出来的数字就是 kk 了。

    至此我们已经学会了使用这两个函数,只要对输入的数列进行简单运用就可以通过此题。

    (完)

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[200];
    int main(){
    	cin >> n;
    	for(int i = 1;i <= n;i ++) cin >> a[i];
    	sort(a + 1,a + n + 1);//排序
    	n = unique(a + 1,a + n + 1) - (a + 1);//去重,并把去重后的元素个数记为 n
    	printf("%d\n",n);//输出去重后的元素个数
    	for(int i = 1;i <= n;i ++) printf("%d ",a[i]);//输出去重后的元素
    	printf("\n");
      return 0;
    }
    
    • 1

    信息

    ID
    61
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者