zoukankan      html  css  js  c++  java
  • JZOJ5775 农夫约的假期

    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,表示魔音值最小的地方的坐标(如果有多个答案,输出横坐标最小的情况下,纵坐标最小的)。

    Sample Input

      3 3 1
      1 1 1
      1 2 1
      1 3 1

    Sample Output

      5
      1 2

    Data Constraint

      10%的数据,n<=10(来自题目的馈赠).
      30%的数据,n<=1000.
      100%的数据,0<n<=100000,0<m<=100000,0<z<=10,0<q[i]<=100.

    Solution

      魔音增加的量其实是曼哈顿距离,所以横纵坐标互不影响,因为数据较小,所以暴力枚举横坐标和纵坐标。

     1 #include<cstdio>
     2 using namespace std;
     3 int n,m,x[1000000],y[1000000];
     4 long long s,l,r,z;
     5 int cc(int xx)
     6 {
     7     if (xx<0) return -xx;
     8     return xx;
     9 }
    10 int main()
    11 {
    12     scanf("%d%d%lld",&n,&m,&z);
    13     for (int i=1;i<=m;i++)
    14     {
    15         long long xx,yy,qq;
    16         scanf("%lld%lld%lld",&xx,&yy,&qq);
    17         x[xx]++;
    18         y[yy]++;
    19         l=l+xx-1;
    20         r=r+yy-1;
    21         s=s+qq;
    22     }
    23     l=l;r=r;
    24     long long ll=l,rr=r;
    25     int xx=1,yy=1;
    26     for (int i=2;i<=n;i++)
    27     {
    28         x[i]=x[i]+x[i-1];
    29         y[i]=y[i]+y[i-1];
    30     }
    31     for (int i=2;i<=n;i++)
    32     {
    33         l=l+x[i-1]*2-m;
    34         if (l<ll) 
    35         {
    36             ll=l;
    37             xx=i;
    38         }
    39     }
    40     for (int i=2;i<=n;i++)
    41     {
    42         r=r+y[i-1]*2-m;
    43         if (r<rr)
    44         {
    45             rr=r;
    46             yy=i;
    47         }
    48     }
    49     printf("%lld
    ",s+ll+rr);
    50     printf("%d %d
    ",xx,yy);
    51 }
    View Code
      
  • 相关阅读:
    如何改计算机用户名
    解决windows弹出'你可能是盗版软件的受害者...'及去除自动更新图标
    关于复制文件出现“Thumbs:访问被拒绝......”的解决办法和相关知识
    <百度分享平台>透明FLASH模块的方法
    绝对性解决打开我的电脑打开文件夹在新窗口中打开问题
    Git忽略规则(.gitignore配置)不生效原因和解决
    汇编学习笔记18
    汇编学习笔记21
    汇编学习笔记16
    汇编学习笔记22
  • 原文地址:https://www.cnblogs.com/Tokisaki-Kurumi/p/9477935.html
Copyright © 2011-2022 走看看