分析
x,y,z: 满足 x + y > z, x + z > y, y + z > x,
其中 x + z > y 和 y + z > x 等价于 z > y - x 和 z > x - y,
综上所述,z 满足 z < x + y 且 z > abs(x - y), 所以计算 z 的(abs(x - y), x + y)区间长度和.
代码实现
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, x;
cin >> n >> x;
int a[n];
for (auto &c : a) cin >> c;
sort(a, a + n);
long long res = 0;
for (int i = 0; i < n; i++)
{
int l = upper_bound(a + i + 1, a + n, abs(x - a[i])) - a;
int r = lower_bound(a + i + 1, a + n, x + a[i]) - a;
res += r - l;
}
cout << res;
return 0;
}
兄弟有时间填个邀请码hhhhhhhhh(可以得AC币,邀请码在学生认证那填) 我的邀请码是:GUDFH