![](https://img-blog.csdnimg.cn/img_convert/3c617fe6df0e49b089f22a0594f6731b.png)
题面翻译:
在平面上放置n个点,使任意两点间的曼哈顿距离大于1,每个点消费为横纵坐标绝对值的和
求消费最大的点的最小消费。
思路:
注意到实质为以(0,0)为圆心画正方形,顶点为(m,0),边长为 (m+1)*根号2 ,可以包含(m+1)^2个点。先对n开方,求出平方小于n的最大整数m,判断如果m的平方是n,答案就是m-1;如果m的平方小于n,答案就是m。
AC代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#include<cstring>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
int a[35];
int MAX = -1000;
void solve() {
ll n; cin >> n;
ll m = (int)sqrt(n);
if (n==m*m)cout << m - 1 << endl;
else cout << m << endl;
}
int main() {
int T; cin >> T;
while (T--) {
solve();
}
int sum = 0;
return 0;
}