站外题
  • 板块学术版
  • 楼主isJason
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/1/9 15:35
  • 上次更新2023/10/24 05:01:56
查看原帖
站外题
738674
isJason楼主2023/1/9 15:35
时空限制
CPU占用时长: 1.00秒内存使用限制: 128MB
问题描述
大家都说“做人要做懒羊羊”,为什么呢?因为他不愿意多做一个动作、不愿意多动一个脑筋,甚至懒得张嘴吃饭,简直是懒的无与伦比!
话说羊村的羊还真多啊!每周一早晨,羊村老村长慢羊羊同志学着人类的学校,把所有羊列队在广场上进行思想教育,主要是保持警惕防止狼类的攻击,当然也包括
对懒羊羊之类的“异类”进行批评教育。
羊群列队成一个 m*n 的方阵,每只羊站在一个格子里,而且是长期固定的,便于点名啊!
当然,这样一来的好处是,大家都知道自己的朋友站在哪个位置,虽然它们可能互相看不见,但心里都知道,并且在老村长进行无聊的训教时,大家都还想赶快结束
赶快找离自己最近的朋友交流周末的开心事呢!
懒羊羊也想尽快找到自己的好朋友聊天,但是他既不愿意多走路、又不愿意动脑筋去想怎么走,所以就请智羊羊同学帮它编个程序,以便快速定位找到离它最近的一
位好朋友。
如果你是智羊羊,你怎么完成这个任务呢?

输入格式
第 1 行有两个整数 m 和 n,表示羊群方阵的行数和列数,2<=m,n<=100。
第 2 行是为懒羊羊的位置 x,y,表示在第 x 行 y 列。
以下 m 行是 1 个 m*n 的数字方阵,所有 a[i,j]的值相等的表示是好朋友,1<=a[i,j]<=100。
每行的两个数之间都有一个空格分隔

输出格式
只有 1 行两个数 x1,y1,表示懒羊羊最近的一个朋友的位置在第 x1 行 y1 列,两个
数之间用一个空格隔开。
如果最近的的朋友不只一个,则输出 x1 最小的,如果还不唯一,则输出 y1 最小的。
数据保证懒羊羊一定有朋友。

输入输出样例
样例1
输入样例 复制
4 4
1 2
2 1 2 1
1 3 1 3
2 1 2 2
2 2 1 3
输出样例 复制
1 4
数据范围与提示
懒羊羊(1,2)有 5 个朋友,其中 3 个朋友(2,1)、(2,3)、(1,4)离它的距离都是 2,
但是其中(1,4)的 x1=1 是最小的
#include <bits/stdc++.h>
using namespace std;

int dis(int ai, int aj, int bi, int bj){
    return abs(ai-bi)+abs(aj-bj);
}

struct fr{
    int i, j, dis;
}f[10001];

bool cmp(fr a, fr b){
    if(a.dis==b.dis){
        if(a.i==b.i){
            return a.j<b.j;
        }
        return a.i<b.i;
    }
    return a.dis<b.dis;
}

int main(){
    int m, n, x, y, a[101][101], fd=0;
    fr f[10001];
    cin>>m>>n>>x>>y;
    x-=1;
    y-=1;
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            cin>>a[i][j];
        }
    }
    for(int i=0; i<m; i++){
        for(int j=0; j<m; j++){
            if(i==x&&j==y){
                continue;
            }
            if(a[i][j]==a[x][y]){
                f[fd].i=i;
                f[fd].j=j;
                f[fd].dis=dis(x, y, i, j);
                fd++;
            }
        }
    }
    sort(f, f+fd, cmp);
    cout<<f[0].i+1<<" "<<f[0].j+1<<endl;
    return 0;
}

80分 大佬们,代码有神么问题?

2023/1/9 15:35
加载中...