[语言月赛202208] 俊俏地鼠的远亲
题目背景
地鼠十分想要找到自己远方的亲戚!
题目描述
非洲同胞永远是我们的好朋友。在东非草原上,一共有 n × m n\times m n×m 只地鼠,他们生活的窝排列成 n × m n\times m n×m 网格型。
其中,每只地鼠都有一个特征值 b i , j b_{i,j} bi,j,经调查,我们认为特征值相同的地鼠一定有某种血缘关系。例如,两只地鼠分别生活在第二行第三列、第五行第六列。若 b 2 , 3 = b 5 , 6 b_{2,3}=b_{5,6} b2,3=b5,6,那么我们认为这两只地鼠是亲戚。
现在,给出这个 n × m n\times m n×m 只地鼠的位置,需要对每只地鼠求出离自己距离最远的亲戚的距离是多少。
注意,假设两只地鼠分别位于第 i i i 行第 j j j 列和第 a a a 行第 b b b 列,则它们之间的距离为 ( i − a ) 2 + ( b − j ) 2 (i-a)^2+(b-j)^2 (i−a)2+(b−j)2 。
输入格式
第一行两个正整数 n , m n,m n,m,表示地鼠家族的行数和列数。
第 2 ∼ n + 1 2\sim n+1 2∼n+1 行给出一张大小为 n × m n\times m n×m 的数表 { b n , m } \{b_{n,m}\} {bn,m},其中 b i , j b_{i,j} bi,j 表示第 i i i 行 j j j 列上地鼠的特征值。
输出格式
输出同样是一个 n × m n\times m n×m 的数表,其中每个元素表示距自己最远的亲戚的距离是多少。
特别的,如果有某只地鼠没有远亲,则输出 0 0 0 。
样例 #1
样例输入 #1
2 4
1 2 3 2
3 2 1 3
样例输出 #1
5 4 5 5
9 5 5 9
提示说明
对于 30 % 30\% 30% 的数据, 1 ≤ n , m ≤ 3 1\leq n,m \leq 3 1≤n,m≤3 。
对于另外 10 % 10\% 10% 的数据,有 n = 1 n=1 n=1 。
对于另外 10 % 10\% 10% 的数据,有 m = 1 m=1 m=1 。
对于另外 10 % 10\% 10% 的数据,有 b i , j = 1 b_{i,j}=1 bi,j=1 。
对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 50 1\leq n,m\leq 50 1≤n,m≤50, 1 ≤ b i , j ≤ 1 0 18 1\leq b_{i,j}\leq 10^{18} 1≤bi,j≤1018 。
代码内容
//#include <iostream>
//#include <algorithm>
//#include <string>
//#include <cmath>
//#include <ctime>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,m;
cin>>n>>m;
ll arr[n][m],maxn[n][m];
ll i,j,nums;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cin>>arr[i][j];
maxn[i][j]=0;
}
ll k,h;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
for(k=0;k<n;k++)
for(h=0;h<m;h++)
{
if(arr[i][j]==arr[k][h])
{
nums=(i-k)*(i-k)+(j-h)*(j-h);
maxn[i][j]=max(nums,maxn[i][j]);
}
}
for(i=0;i<n;i++)
{
cout<<maxn[i][0];
if(m==1) cout<<endl;
for(j=1;j<m;j++)
{
cout<<" "<<maxn[i][j];
if((j+1)%m==0) cout<<endl;
}
}
return 0;
}