JZOJ 5775. 【NOIP2008模擬】農夫約的假期
阿新 • • 發佈:2018-12-11
文章目錄
題目:
分析:
首先,關於這道題,有個很巧妙的方法:在沒出資料前,機智的提交,即可用 成功 然後是認真的解法,這個就分為兩種了,一個是縊蟶的二維字首和,在此篇題解不做講解 最後,是我的玄學方法了: 根據題意,再加以理解,我們可以發現,求的是對於m個點曼哈頓距離最短的點位置 這樣我們求的就是所有點的平均座標值,大家也可以變成靈魂畫師,自己理解下 但為什麼可以,就不知道了,反正賽制不需要證明… 好吧,其實是可以證明(畢竟聽了梓豪的講評),但我懶呀
程式碼:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<set>
#include<queue>
#include<vector>
#include<map>
#include<list>
#include<ctime>
#include<iomanip>
#include<string>
#include<bitset>
#include<deque>
#include<set>
#define LL long long
#define h happy
#define ch cheap
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&& s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
const int N=100001;
LL n,m,z,sum,y[N],x[N],tp;
int main(){
n=read();m=read();z=read();
for(int i=1;i<=m;i++){x[i]=read();y[i]=read();tp=read();sum+=tp;}
int mid=ceil((double)m/2);
sort(x+1,x+m+1);sort(y+1,y+m+1);
for(int i=1;i<=m;i++)
sum+=abs(x[i]-x[mid])+abs(y[i]-y[mid]);
cout<<sum<<endl;
cout<<x[mid]<<" "<<y[mid];
return 0;
}