习题:农夫约的假期(分析&中位数)
作者:互联网
题目
思路
大意了,以为最长的题目是最恶心的题目
原来的魔音值实际上没有影响,因为不管什么方案都要包含这些基础贡献
仔细观察,其中行和列是独立的
考虑行的式子,设选择的点的行为x
那么就有\(ans=\sum|x-x_i|\)
然后?这不是个裸的绝对值不等式的经典式子?
取中位数即可
代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
int x,y;
long long val;
friend bool operator < (const node &a,const node &b)
{
return a.val>b.val;
}
}a[100005];
int n,m,z;
int x,y;
long long ans=0;
int f_abs(int x)
{
return x<0?-x:x;
}
vector<int> v1,v2;
int main()
{
//ios::sync_with_stdio(false);
//freopen("shuru.in","r",stdin);
//freopen("shuru.out","w",stdout);
cin>>n>>m>>z;
for(int i=1;i<=m;i++)
{
cin>>a[i].x>>a[i].y>>a[i].val;
ans=ans+a[i].val;
v1.push_back(a[i].x);
v2.push_back(a[i].y);
}
sort(v1.begin(),v1.end());sort(v2.begin(),v2.end());
if(m%2==0)
m=m/2-1;
else
m/=2;
for(int i=0;i<v1.size();i++)
ans=ans+f_abs(v1[m]-v1[i]);
for(int i=0;i<v2.size();i++)
ans=ans+f_abs(v2[m]-v2[i]);
cout<<ans<<'\n'<<v1[m]<<' '<<v2[m];
return 0;
}
标签:val,int,中位数,long,v2,ans,习题,include,农夫 来源: https://www.cnblogs.com/loney-s/p/14052891.html