D. Fun
一道奇妙的数学题。
我的思路一开始是枚举a,然后通过已有的两个式子变换,使得能在只知道a的情况下直接知道b和c。但这样的式子无法构造。
分析:正解是,先得到以下两个式子
ab <= n
a+b <=x
当 a=1时, bb 有 n 个选择。当 a=2 时, b 有 n2 个选择。因此, b 总共有
个选项。这仅仅是调和数列,因此在所有可能的 a 中, b 大约有 nlogn 个选择。因此,我们可以同时循环 a 和 b 。
void solve() {
int n, x; cin >> n >> x;
int ans = 0;
rep(a, 1, min(n, x)) {
for (int b = 1; a * b <= n && a + b <= x; b++) {
int cnt = min(x - a - b, (n - a * b) / (a + b));
ans += cnt;
}
}
//tans;
cout << ans << endl;
}