题意:寻找一个数x,使得(x + lceil frac{d}{x + 1} ceil)和n相等或者小于n,如果存在这样一个数x,就输出YES,否则输出NO,或者当d <= n时,输出YES。
分析:(x + lceil frac{d}{x + 1}
ceil) 可以化成(lceil x + frac {d}{x + 1}
ceil),因为x是整数,向上取整,依然等于x,所以可以合并到里面,然后,我们再进一步化公式,
(lceil {(x + 1)} + frac{d}{x + 1} - 1
ceil) (geq lceil 2sqrt{d} - 1
ceil) (基本不等式),那么我们只需要判断该最小值(2sqrt{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;
}