• 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.
  • 相关阅读:
    【支付宝支付】手机网页内 支付宝支付实现过程
    【微信支付】微信端的手机网页支付 开发流程
    【Linux】Linux下 环境变量/etc/profile、/etc/bashrc、~/.bashrc的区别【转】
    SLF4J 和 Logback 在 Maven 项目中的使用方法
    打造Spring Cloud构建微服务架构的最全资料
    WebApi安全性 使用TOKEN+签名验证
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />的意义
    request.getParameter(“参数名”) 中文乱码解决方法
    Mysql的timestamp类型,自动记录数据的更新时间
    根据身份证号,取得行政区划的Javascript实现
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9451663.html
Copyright © 2020-2023  润新知