题目大意:
在某国有一个叫农夫约的人,他养了很多羊,其中有两头名叫mm和hh,他们的歌声十分好听,被当地人称为“魔音”······
农夫约也有自己的假期呀!他要去海边度假,然而mm和hh不能离开他。没办法,他只好把他们两个带上。
到了海边,农夫约把他的羊放在一个(nn)的矩阵(有nn个方格)里。mm和hh十分好动,他们要走到m(m<=n*n)个地方,第i个地方的坐标为(x[i](行),y[i](列)),每到一个地方他们会高歌一曲,制造q[i]点魔音值,因为他们的魔音十分独特,他们的声音只能横着或竖着传播。每传播一格,魔音值会增加1。(传播的格子数取最小的)接下来农夫约要住酒店。为了方便照顾小羊们,他选的酒店的坐标要在矩阵内。但小羊们的魔音让他十分头疼。他想求出魔音值最小的地方。
他还要享受他的假期,所以他把这个任务交给你了,加油(_)
解题思路:
发现是中位数
然后就是水题了
(话说题目是不是错了,农夫约???农夫约翰吧===)
Accepted code:
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
long long ans,ans_z;
int n,m,mid_x,mid_y,z,x[100001],y[100001];
int main() {
scanf("%d%d%d",&n,&m,&z);
for (int i=1;i<=m;i++)
scanf("%d%d%d",&x[i],&y[i],&z),ans_z+=z;
sort(x+1,x+m+1), sort(y+1,y+m+1);
mid_x=x[(1+m)>>1], mid_y=y[(1+m)>>1];
for (int i=1;i<=m;i++)
ans+=abs(x[i]-mid_x)+abs(y[i]-mid_y);
printf("%lld\n%d %d",ans+ans_z,mid_x,mid_y);
}