D. Fun
time limit per test: 2 seconds
memory limit per test: 256 megabytes
input: standard input
output: standard output
Counting is Fun!
— satyam343
Given two integers n n n and x x x, find the number of triplets ( a , b , c a,b,c a,b,c) of positive integers such that a b + a c + b c ≤ n ab + ac + bc \le n ab+ac+bc≤n and a + b + c ≤ x a + b + c \le x a+b+c≤x.
Note that order matters (e.g. ( 1 , 1 , 2 1, 1, 2 1,1,2) and ( 1 , 2 , 1 1, 2, 1 1,2,1) are treated as different) and a a a, b b b, c c c must be strictly greater than 0 0 0.
给定两个整数 n n n 和 x x x ,求 a b + a c + b c ≤ n ab + ac + bc \le n ab+ac+bc≤n 和 a + b + c ≤ x a + b + c \le x a+b+c≤x 的个正整数的三联数( a , b , c a,b,c a,b,c )的个数。
注意顺序问题(例如 ( 1 , 1 , 2 1, 1, 2 1,1,2 ) 和 ( 1 , 2 , 1 1, 2, 1 1,2,1 ) 被视为不同), a a a , b b b , c c c 必须严格大于 0 0 0 。
Input
The first line contains a single integer t t t ( 1 ≤ t ≤ 1 0 4 1 \leq t \leq 10^4 1≤t≤104) — the number of test cases.
Each test case contains two integers n n n and x x x ( 1 ≤ n , x ≤ 1 0 6 1 \leq n,x \leq 10^6 1≤n,x≤106).
It is guaranteed that the sum of n n n over all test cases does not exceed 1 0 6 10^6 106 and that the sum of x x x over all test cases does not exceed 1 0 6 10^6 106.
输入
第一行包含一个整数 t t t ( 1 ≤ t ≤ 1 0 4 1 \leq t \leq 10^4 1≤t≤104 ) - 测试用例数。
每个测试用例包含两个整数 n n n 和 x x x ( 1 ≤ n , x ≤ 1 0 6 1 \leq n,x \leq 10^6 1≤n,x≤106 )。( 1 ≤ n , x ≤ 1 0 6 1 \leq n,x \leq 10^6 1≤n,x≤106 ).
保证所有测试用例的 n n n 之和不超过 1 0 6 10^6 106 ,所有测试用例的 x x x 之和不超过 1 0 6 10^6 106 。
Output
Output a single integer — the number of triplets ( a , b , c a,b,c a,b,c) of positive integers such that a b + a c + b c ≤ n ab + ac + bc \le n ab+ac+bc≤n and a + b + c ≤ x a + b + c \le x a+b+c≤x.
输出
输出一个整数 - a b + a c + b c ≤ n ab + ac + bc \le n ab+ac+bc≤n 和 a + b + c ≤ x a + b + c \le x a+b+c≤x 的正整数三元组( a , b , c a,b,c a,b,c )的个数。
Example
Input
4
7 4
10 5
7 1000
900000 400000
Output
4
10
7
1768016938
Note
In the first test case, the triplets are ( 1 , 1 , 1 1, 1, 1 1,1,1), ( 1 , 1 , 2 1, 1, 2 1,1,2), ( 1 , 2 , 1 1, 2, 1 1,2,1), and ( 2 , 1 , 1 2, 1, 1 2,1,1).
In the second test case, the triplets are ( 1 , 1 , 1 1, 1, 1 1,1,1), ( 1 , 1 , 2 1, 1, 2 1,1,2), ( 1 , 1 , 3 1, 1, 3 1,1,3), ( 1 , 2 , 1 1, 2, 1 1,2,1), ( 1 , 2 , 2 1, 2, 2 1,2,2), ( 1 , 3 , 1 1, 3, 1 1,3,1), ( 2 , 1 , 1 2, 1, 1 2,1,1), ( 2 , 1 , 2 2, 1, 2 2,1,2), ( 2 , 2 , 1 2, 2, 1 2,2,1), and ( 3 , 1 , 1 3, 1, 1 3,1,1).
注
在第一个测试用例中,三元组是 ( 1 , 1 , 1 1, 1, 1 1,1,1 )、( 1 , 1 , 2 1, 1, 2 1,1,2 )、( 1 , 2 , 1 1, 2, 1 1,2,1 ) 和 ( 2 , 1 , 1 2, 1, 1 2,1,1 )。
在第二个测试用例中,三元组是 ( 1 , 1 , 1 1, 1, 1 1,1,1 )、( 1 , 1 , 2 1, 1, 2 1,1,2 )、( 1 , 1 , 3 1, 1, 3 1,1,3 )、( 1 , 2 , 1 1, 2, 1 1,2,1 )、( 1 , 2 , 2 1, 2, 2 1,2,2 )、( 1 , 3 , 1 1, 3, 1 1,3,1 )、( 2 , 1 , 1 2, 1, 1 2,1,1 )、( 2 , 1 , 2 2, 1, 2 2,1,2 )、( 2 , 2 , 1 2, 2, 1 2,2,1 ) 和 ( 3 , 1 , 1 3, 1, 1 3,1,1 )。
题意
题目说得非常直白
给你两个数
n
,
x
n,x
n,x ,让你给出
使
a
,
b
,
c
a,b,c
a,b,c 满足
a
b
+
a
c
+
b
c
≤
n
ab + ac + bc \le n
ab+ac+bc≤n 且
a
+
b
+
c
≤
x
a + b + c \le x
a+b+c≤x
给出所有的
a
,
b
,
c
a,b,c
a,b,c 的数量
题解
本题的时间复杂度看似是
O
(
n
3
)
O(n^3)
O(n3) ,实际上是
O
(
n
2
)
O(n^2)
O(n2)
因为你只要确定了
a
a
a 和
b
b
b ,
c
c
c 的范围也就确定了
那我们只要根据式子,已知
n
,
x
,
a
,
b
n,x,a,b
n,x,a,b ,倒推
c
c
c 的表达式
然后对遍历
a
,
b
a,b
a,b 就可以了
c
c
c 的表达式
c
≤
n
−
a
b
a
+
b
c \le \frac{n-ab}{a+b}
c≤a+bn−ab
c
≤
x
−
a
−
b
c \le x - a- b
c≤x−a−b
两者取最小值即可
代码
#include <bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3f
#define all(x) x.begin(),x.end()
using i64 = long long;
int t = 1;
void solve(){
i64 ans = 0;
int n,m;
std::cin >> n >> m;
for(int i = 1 ; i <= n && i <= m ; i ++) {
for(int j = 1 ; i+j <= m && i*j <= n ; j ++) {
ans += std::min(m-i-j,(n-i*j)/(i+j));
}
}
std::cout << ans << "\n";
}
signed main(){
std::cin >> t;
while(t--){
solve();
}
return 0;
}
转载自https://www.cnblogs.com/jiejiejiang2004/p/18331811
博主已同意,我就是博主