时空限制
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分 大佬们,代码有神么问题?