Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
30327 22fhq 【S】T3 C++ 解答错误 10 30 MS 380 KB 1535 2024-06-23 18:24:24

Tests(3/7):


#include<bits/stdc++.h> using namespace std; #define int long long int n,k,x[1505],y[1505],dis[1505],ans=LONG_MAX; vector<int>chx,chy,chid; int ansx,ansy,tansx,tansy; int calc(vector<int>x,vector<int>y,int xx,int yy){ int res=0; for(int k:x)res+=abs(k-xx); for(int k:y)res+=abs(k-yy); return res; } signed main(){ cin>>n>>k; for(int i=1;i<=n;i++){ cin>>x[i]>>y[i]; } for(int i=1;i<=k;i++){ chx.push_back(x[i]); chy.push_back(y[i]); chid.push_back(i); } sort(chx.begin(),chx.end()); sort(chy.begin(),chy.end()); ansx=chx[chx.size()/2],ansy=chy[chy.size()/2]; int sum=calc(chx,chy,ansx,ansy); ans=min(ans,sum); for(int i=k+1;i<=n;i++){ chx.push_back(x[i]),chy.push_back(y[i]),chid.push_back(i); sort(chx.begin(),chx.end()); sort(chy.begin(),chy.end()); ansx=chx[chx.size()/2],ansy=chy[chy.size()/2]; for(int j=1;j<=n;j++)dis[j]=abs(x[j]-ansx)+abs(y[j]-ansy); int mx=1; for(int j:chid){ if(dis[mx]<dis[j])mx=j; } chx.erase(lower_bound(chx.begin(),chx.end(),x[mx])); chy.erase(lower_bound(chy.begin(),chy.end(),y[mx])); chid.erase(lower_bound(chid.begin(),chid.end(),mx)); ansx=chx[chx.size()/2],ansy=chy[chy.size()/2]; int sum=calc(chx,chy,ansx,ansy); if(ans>sum){ ans=sum; tansx=ansx,tansy=ansy; } } cout<<ans<<endl; return 0; }


测评信息: