题意:寻找一个数x,使得\(x + \lceil \frac{d}{x + 1} \rceil\)和n相等或者小于n,如果存在这样一个数x,就输出YES,否则输出NO,或者当d <= n时,输出YES。
分析:\(x + \lceil \frac{d}{x + 1} \rceil\) 可以化成\(\lceil x + \frac {d}{x + 1} \rceil\),因为x是整数,向上取整,依然等于x,所以可以合并到里面,然后,我们再进一步化公式,
\(\lceil {(x + 1)} + \frac{d}{x + 1} - 1 \rceil\) \(\geq \lceil 2\sqrt{d} - 1 \rceil\) (基本不等式),那么我们只需要判断该最小值\(2\sqrt{d}-1\)是否小于等于n,如果不存在,那么输出YES,否则输出NO。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, d;
cin >> n >> d;
int t = static_cast<int>(ceil(2 * sqrt(d) - 1));
if (t <= n)
puts("YES");
else
puts("NO");
}
return 0;
}