Description
在某国有一个叫农夫约的人,他养了很多羊,其中有两头名叫mm和hh,他们的歌声十分好听,被当地人称为“魔音”······
农夫约也有自己的假期呀!他要去海边度假,然而mm和hh不能离开他。没办法,他只好把他们两个带上。
到了海边,农夫约把他的羊放在一个(n*n)的矩阵(有n*n个方格)里。mm和hh十分好动,他们要走到m(m<=n*n)个地方,第i个地方的坐标为(x[i](行),y[i](列)),每到一个地方他们会高歌一曲,制造q[i]点魔音值,因为他们的魔音十分独特,他们的声音只能横着或竖着传播。每传播一格,魔音值会增加1。(传播的格子数取最小的)接下来农夫约要住酒店。为了方便照顾小羊们,他选的酒店的坐标要在矩阵内。但小羊们的魔音让他十分头疼。他想求出魔音值最小的地方。
他还要享受他的假期,所以他把这个任务交给你了,加油(^_^)。
农夫约也有自己的假期呀!他要去海边度假,然而mm和hh不能离开他。没办法,他只好把他们两个带上。
到了海边,农夫约把他的羊放在一个(n*n)的矩阵(有n*n个方格)里。mm和hh十分好动,他们要走到m(m<=n*n)个地方,第i个地方的坐标为(x[i](行),y[i](列)),每到一个地方他们会高歌一曲,制造q[i]点魔音值,因为他们的魔音十分独特,他们的声音只能横着或竖着传播。每传播一格,魔音值会增加1。(传播的格子数取最小的)接下来农夫约要住酒店。为了方便照顾小羊们,他选的酒店的坐标要在矩阵内。但小羊们的魔音让他十分头疼。他想求出魔音值最小的地方。
他还要享受他的假期,所以他把这个任务交给你了,加油(^_^)。
Input
第一行输入n、m和z。
接下来m行,每行3个正整数x[i],y[i]和q[i]。
接下来m行,每行3个正整数x[i],y[i]和q[i]。
Output
第一行一个整数表示魔音值最小是多少。
接下来一行两个正整数zb1和zb2,表示魔音值最小的地方的坐标(如果有多个答案,输出横坐标最小的情况下,纵坐标最小的)。
接下来一行两个正整数zb1和zb2,表示魔音值最小的地方的坐标(如果有多个答案,输出横坐标最小的情况下,纵坐标最小的)。
Solutions
见代码。
代码
1 var 2 num,ans:int64; 3 n,m,z:longint; 4 x,y,xx,yy:array [0..100001] of int64; 5 procedure init; 6 var 7 i,q:longint; 8 begin 9 readln(n,m,z); 10 ans:=0; 11 for i:=1 to m do 12 begin 13 readln(xx[i],yy[i],q); 14 ans:=ans+q; 15 inc(x[xx[i]]); inc(y[yy[i]]); 16 end; 17 for i:=2 to n do 18 begin 19 x[i]:=x[i]+x[i-1]; 20 y[i]:=y[i]+y[i-1]; 21 end; 22 end; 23 24 procedure main; 25 var 26 tt,kk:int64; 27 i,qq,zz:longint; 28 begin 29 for i:=1 to n do 30 if x[i]>x[n]-x[i] then 31 begin 32 qq:=i; 33 break; 34 end; 35 for i:=1 to n do 36 if y[i]>y[n]-y[i] then 37 begin 38 zz:=i; 39 break; 40 end; 41 num:=0; tt:=0; kk:=0; 42 for i:=1 to m do 43 begin 44 num:=num+abs(xx[i]-qq)+abs(yy[i]-zz); 45 tt:=tt+abs(xx[i]-qq+1)+abs(yy[i]-zz); 46 kk:=kk+abs(xx[i]-qq)+abs(yy[i]-zz+1); 47 end; 48 while tt=num do 49 begin 50 tt:=0; dec(qq); 51 for i:=1 to m do 52 tt:=tt+abs(xx[i]-qq+1)+abs(yy[i]-zz); 53 end; 54 while kk=num do 55 begin 56 kk:=0; dec(zz); 57 for i:=1 to m do 58 kk:=kk+abs(xx[i]-qq)+abs(yy[i]-zz+1); 59 end; 60 writeln(num+ans); 61 writeln(qq,' ',zz); 62 end; 63 64 begin 65 assign(input,'shuru.in'); 66 assign(output,'shuru.out'); 67 reset(input); 68 rewrite(output); 69 init; 70 main; 71 close(input); 72 close(output); 73 end.