P1748 a+b+c+d==0

323 阅读1分钟

image.png

image.png

思路

合并ab、cd,在cd中找ab的相反数,最后的upper_bound是数组中大于目标值的第一个元素的地址,low_bound是大于等于的第一个元素的地址。

tips:

1.参数一二是范围、三是目标值

2.是利用二分法查找

3.找到数据就返回它所在的地址

部分代码

    for(int i = 0;i < n*n;i ++){
        int temp = -ab[i];
        ans += upper_bound(cd,cd + n*n, temp) - lower_bound(cd,cd + n*n,temp);
    }
    cout << ans << endl;