直接想到这是利用了国际象棋的棋盘的性质,黑格子互不相邻,白格子也是,于是一个面积为m的矩形棋盘最多可以容纳\lfloor \frac{m}{2} \rfloor个第一种棋子,以及\lceil \frac{m}{2} \rceil个第二种棋子。按照这个规律,二分即可。注意二分的量是正方形的边长,以及乘法不要越int的界,而不是面积。C++代码在图片下面:

#include <iostream>
using namespace std;
int main() {
	int tt; cin >> tt;
	while (tt--) [&]()->void {
		int a, b; cin >> a >> b;
		int l = 1, r = 5e4;
		while (l < r) {
			int m = (l + r) >> 1;
			int mm = m * m;
			if (mm / 2 >= a && (mm + 1) / 2 >= b || mm / 2 >= b && (mm + 1) / 2 >= a) {
				r = m;
			} else {
				l = m + 1;
			}
		}
		cout << l << '\n';
	}() ;

	return 0;
}