洛谷P1059 明明的随机数

注:本题解写给和本蒟蒻一样的萌新看,不喜者请略过。另欢迎各位大佬提出意见!

这题其实很H₂O,因为数据较小(N≤100),用for循环就可以A掉。但是,在这里我们用一个简单且快速的方法:

STL库!(STL大法好)

首先我们来认识一下这两个函数:

排序函数 sort

sort是C++STL库里的排序函数,属于十分常用的函数之一,可以节省一些手写的时间 (懒人福音),缺点就是运行起来没有手写的快(STL都这一个尿性)。

sort函数的格式是这样的:

sort(数组名称,数组名称+数组元素个数);

举个例子:

int a[15];
sort(a,a+15);

然后你就会发现,它已经帮你排好序了!

去重函数 unique

unique也是C++STL库里的常用函数之一,用来给一个已经

排!好!序!的!

数组去重。unique的原理其实是把重复的元素用后面的元素代替掉。

unique函数的用法是这样的:

unique(数组名称,数组名称+数组元素个数)

当然它还有一个十分神奇的用法:

int n = unique(数组名称,数组名称+数组元素个数);

这样,你就会惊喜的发现,不但数组已经去重,还得到了去重后的数组元素数量!

需要注意的是:

如果你输入数据时for循环喜欢写i=1,那么sort和unique应该相应的变为(数组名称+1,数组名称+数组元素个数+1)

当然,不要忘记了头文件:

<algorithm>

好了,直接献上

AC代码!

#include<cstdio>
#include<algorithm>  //头文件记得加上哦
using namespace std;
int n,a[107],t;
int main()
{
    scanf("%d",&n);  //用scanf和printf读写速度会比cout和cin快,所以建议使用scanf和printf
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    sort(a,a+n);
    t=(unique(a,a+n)-a);
    printf("%d\n",t);
    for(int i=0;i<t;i++)
        printf("%d ",a[i]);
    return 0;
}

 

另附i=1的写法:

#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[107],t;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    t=(unique(a+1,a+n+1)-a-1);
    printf("%d\n",t);
    for(int i=1;i<=t;i++)
        printf("%d ",a[i]);
    return 0;
}

好了,这篇题解就这样A掉了

上一篇:C++多线程:std::unique_lock


下一篇:python set模块