2017级算法第二次上机-D.天秤的烦恼

这道题考查的还是基本STL的使用 这次考察的是去重函数的STL unique()

unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址。

所以如果你想要的是将任意一个数组实现去重 那么首先要将他sort排序。

然后unique返回的还是去重之后的尾地址,那么len=unique(ar,ar+n) - ar 即是去重后数组的首地址。

如果之后还要使用这个数组的话,记得呀更新数组的长度。

总结一下,发现的STL的两个特性吧:

1,stl函数的参数如果是一个数组的话 习惯上使用左闭右开的想法。

2, stl函数的返回值对于数组的话,极有可能是返回的是一个地址。

#include <algorithm>
#include <iostream>
using namespace std;
const int maxlen = 1e6 + 10;
long long ar[maxlen];
int main(){
    int n,i,j,k,len,ans;
    long long x;
    while(~scanf("%d",&n)){
        for(i=0;i<n;i++)
            scanf("%lld",&ar[i]);
        sort(ar,ar+n);
        scanf("%lld",&x);
        len=unique(ar,ar+n) - ar;
        ans=len - (lower_bound(ar,ar+len,x) - ar) ;
        printf("%d
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/visper/p/10099067.html