问题描述
给定一个区间 [L, R]
,请求出有多少组 (X, Y, Z)
满足:
in
X + Y = Z
且满足:
in
L ≤ X, Y, Z ≤ R
输入格式
本题包含多组询问。
- 第一行包含一个整数
T
,表示询问组数。 - 接下来的
T
行,每行包含两个整数Lᵢ, Rᵢ
,用空格分隔,表示一组询问。
输出格式
输出 T
行,每行包含一个整数,表示满足条件的三元组 (X, Y, Z)
的组数。
样例输入
in
2
1 3
1 4
样例输出
out
3
6
样例说明
对于区间 [1, 3]
,满足条件的三元组有:
- (1, 1, 2)
- (1, 2, 3)
- (2, 1, 3)
共 3 组。
对于区间 [1, 4]
,满足条件的三元组有:
- (1, 1, 2)
- (1, 2, 3)
- (2, 1, 3)
- (1, 3, 4)
- (2, 2, 4)
- (3, 1, 4)
共 6 组。
评测用例规模与约定
- 对于 30% 的评测用例:
T ≤ 1000
,Lᵢ, Rᵢ ≤ 100
- 对于 100% 的评测用例:
1 ≤ T ≤ 100000
1 ≤ Lᵢ ≤ Rᵢ ≤ 10⁹
c++代码
cpp
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
typedef __int128_t ll;
int T, a, b;
ll getans(ll l, ll r) {
if (2 * l > r) return 0;
ll k = (ll)((r + 1) / 2);
ll n = k - l + 1;
ll mid = (r + 1) * n - 2 * l * n - n * (n - 1);
mid *= 2;
ll w = (ll)(r / 2);
mid -= (w - l + 1);
return mid;
}
int main() {
cin >> T;
while(T--) {
cin >> a >> b;
cout << (long long)getans(a, b) << endl;
}
return 0;
}//by wqs
思路解析
总的来说,这是一个数学找规律的题目,举几个例子,推导出数学规律就行