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;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14615134.html