朴素做法(60pts)
直接暴力枚举每条线端上的点组成的矩形统计总数即可。
正解
任然可以枚举线段 a_i 和 a_j 上的端点进行探究。
abs(a_i - a_j) 的长度可以是长方形的宽也可以是长方形的长。
- 当 abs(a_i - a_j) 是长方形的长时:可以构成 \max(m - (a_j - a_i - k) + 1, 0) 个矩形
- 当 abs(a_i - a_j) 是长方形的宽时:可以构成 \max(m - (a_j - a_i + k) + 1, 0) 个矩形
那么通过简单的计算我们可以得出我们的答案是:
\sum_{i = 1}^{n} \ \sum_{j = i + 1}^{r_i} (m - (a_i - a_i + k) + 1) + \sum_{i = 1}^{n} \ \sum_{j = L_i}{R_i}(m - (a_j - a_i - k) + 1)
其中 r_i 是使得 m - (a_j - a_i + k) + 1 > 0 成立的 j 的最大值。
L_i 是 a_j - a_i > k 成立的最笑小值
R_i 是使得 m - (a_j - a_i - k) + 1 > 0 成立的最大值
都需要进行二分求得。
提示: lower_bound() 和 upper_bound() 函数可以直接二分。