5775. 【NOIP2008模拟】农夫约的假期

Description

  在某国有一个叫农夫约的人,他养了很多羊,其中有两头名叫mm和hh,他们的歌声十分好听,被当地人称为“魔音”······
  农夫约也有自己的假期呀!他要去海边度假,然而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]。
 

Output

第一行一个整数表示魔音值最小是多少。
接下来一行两个正整数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.
原文地址:https://www.cnblogs.com/zyx-crying/p/9451663.html