直接想到这是利用了国际象棋的棋盘的性质,黑格子互不相邻,白格子也是,于是一个面积为的矩形棋盘最多可以容纳
个第一种棋子,以及
个第二种棋子。按照这个规律,二分即可。注意二分的量是正方形的边长,以及乘法不要越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;
}

京公网安备 11010502036488号