JZOJ5775 农夫约的假期
Posted tokisaki-kurumi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZOJ5775 农夫约的假期相关的知识,希望对你有一定的参考价值。
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,表示魔音值最小的地方的坐标(如果有多个答案,输出横坐标最小的情况下,纵坐标最小的)。
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.
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 }
以上是关于JZOJ5775 农夫约的假期的主要内容,如果未能解决你的问题,请参考以下文章