2021年-PTA模拟赛-L2-2 三足鼎立(二分查找+思路)

思路:

把国家实力都存入数组中,排序后,遍历。
在for循环中,可以将问题简化成,已知两边,求另一边的取值范围,然后在数组里面使用二分查找,找到这个区间,这个区间在我的代码中是前闭后开区间,因此r - l就是一次循环得到的符合条件的第三边的个数

lower_bound()和upper_bound()用法

AcCode:

#include<bits/stdc++.h>
using namespace std;
long ct[100010];
int main(){
    long N, M, res = 0;
    cin >> N >> M;
    for(int i = 0; i < N; i++){
        cin >> ct[i];
    }
    sort(ct, ct + N);
    for(int i = 0; i < N; i++){
        long l = upper_bound(ct + i + 1, ct + N, abs(M - ct[i])) - ct; //c++STL库函数
        long r = lower_bound(ct + i + 1, ct + N, M + ct[i]) - ct; //c++STL库函数
        res += r - l;
    }
    cout << res;
    return 0;
}
posted @ 2025-03-15 00:49  Yuhhhhh  阅读(73)  评论(0)    收藏  举报