P1296 奶牛的耳语

先将所有奶牛的坐标从小到大排序,然后通过双指针(也可以二分)查找第一个超出第\(i\)头奶牛交流范围\(d\)的奶牛的坐标\(r\),同时答案累加上\(r-i-1\)(和第\(i\)头奶牛范围不超过\(d\)的奶牛数,减一是除去第\(i\)头奶牛自身)。

const int N=1e6+10;
int a[N];
int n,d;

int main()
{
    cin>>n>>d;

    for(int i=0;i<n;i++) cin>>a[i];

    sort(a,a+n);

    int res=0;
    int r=0;
    for(int i=0;i<n;i++)
    {
        while(r<n && a[r]-a[i] <= d)
            r++;
        res+=r-i-1;
    }
    cout<<res<<endl;

    //system("pause");
    return 0;
}
posted @ 2021-04-03 22:07  Dazzling!  阅读(102)  评论(0编辑  收藏  举报