排序+中位数 Vijos P2871 安装服务器

来源:互联网 发布:2017linux系统推荐 编辑:程序博客网 时间:2024/06/07 07:14

开始复习一些奇奇怪怪的东西了!!

顺道一提,所谓可以不在城市上完全就是假的!!瓜皮!!!这个完全可以自己画个一维的数轴证明一下。


/*嗯。。。。仔细一想发现这个距离的计算方法弄得这个二维的题目明显变成了两个一维的带权中位数嘛。。横轴:你在纵轴上面走跟我有什么关系咩? */
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>#include<set>#include<map>#include<vector>#include<queue>#include<cctype>#include<ctime>using namespace std;const int maxn=100005;int N,tot,ansx,ansy;struct info{ int x,y,v; }A[maxn];bool cmp1(info a,info b) { return a.x < b.x; }bool cmp2(info a,info b) { return a.y < b.y; }int main(){freopen("test.in","r",stdin);freopen("test.out","w",stdout);scanf("%d",&N);int x,y,k,p;for(int i = 1; i <= N; i++){scanf("%d%d%d%d",&x,&y,&k,&p);A[i] = (info){x,y,k*p};tot += k*p;}tot = (tot+1) / 2;sort(A+1,A+N+1,cmp1);int tmp = 0;for(int i = 1; i <= N; i++){tmp += A[i].v;if(tmp >= tot) { ansx = A[i].x; break; }}sort(A+1,A+N+1,cmp2);tmp = 0;for(int i = 1; i <= N; i++){tmp += A[i].v;if(tmp >= tot) { ansy = A[i].y; break; }}printf("%d %d",ansx,ansy);return 0;}



原创粉丝点击