Codeforces Round #766 (Div. 2)
题意
给出一个n × m 的矩阵,a可以在矩阵中随意标记k个格子。a可以在任何格子,b可以在任何不被标记的格子。a想离b尽量远,b想离a尽量近。问:在满足如上条件的情况下a,b之间的距离。
距离:假设a在
(
x
1
,
y
1
)
(x_1, y_1)
(x1,y1),b在
(
x
2
,
y
2
)
(x_2, y_2)
(x2,y2)。距离d =
∣
x
1
−
x
2
∣
+
∣
y
1
−
y
2
∣
|x_1 - x_2| + |y_1 - y_2|
∣x1−x2∣+∣y1−y2∣。
1
≤
k
≤
n
×
m
−
1
1 \leq k \leq n \times m - 1
1≤k≤n×m−1
对于每个k值,输出对应的满足以上条件的距离。
思路
贪心
由于a 想离 b尽量远,画图可以看出,a只要在矩阵的四个角中离b最远的一个点即可。
代码
vector<int>ans;
int main()
{
IOS;
int T; cin >> T;
while (T--)
{
ans.clear();
int n, m; cin >> n >> m;
for(int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
int d = 0;
d = max(d, abs(i - 1) + abs(j - 1));
d = max(d, abs(i - 1) + abs(j - m));
d = max(d, abs(i - n) + abs(j - 1));
d = max(d, abs(i - n) + abs(j - m));
ans.push_back(d);
}
sort(all(ans));
for (int i = 0; i < sz(ans); i++)
cout << ans[i] << " ";
cout << endl;
}
return 0;
}