俊俏地鼠的远亲

这篇文章描述了一个编程问题,要求在给定的地鼠家族网格中,根据每只地鼠的特征值找到其最远亲戚的距离,利用编程语言如C++实现,适用于IT技术中的数据结构和算法问题解决。
摘要由CSDN通过智能技术生成

[语言月赛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 (ia)2+(bj)2

输入格式

第一行两个正整数 n , m n,m n,m,表示地鼠家族的行数和列数。

2 ∼ n + 1 2\sim n+1 2n+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 1n,m3

对于另外 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 1n,m50 1 ≤ b i , j ≤ 1 0 18 1\leq b_{i,j}\leq 10^{18} 1bi,j1018

代码内容

//#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;
}
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretty Boy Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值