zoukankan      html  css  js  c++  java
  • HDU 4311 Contest 2

    求的是曼哈顿距离。可以把X,Y的距离分开来求。其中,求X、Y的距离可以通过排序后递推的方式求出值的。

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #define LL __int64
    using namespace std;
    
    struct point{
    	int x,y;
    	int num;
    }acm[100005];
    int n;
    
    bool cmpx(point a, point b){
    	if(a.x<b.x) return true;
    	return false;
    }
    bool cmpy(point a,point b){
    	if(a.y<b.y) return true;
    	return false;
    }
    
    LL distx[100005],disty[100005];
    
    LL mint(LL a,LL b){
    	if(a<b) return a;
    	return b;
    }
    
    void init(){
    	for(int i=0;i<n;i++)
    	distx[i]=disty[i]=0;
    }
    
    int main(){
    	int T;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		init();
    		for(int i=0;i<n;i++){
    			scanf("%d%d",&acm[i].x,&acm[i].y);
    			acm[i].num=i;
    		}
    		LL tmp;
    		sort(acm,acm+n,cmpx);
    		tmp=0;
    		for(int i=0;i<n;i++){
    			if(!i)
    				tmp=distx[acm[i].num]=0;
    			else{
    				distx[acm[i].num]=tmp=tmp+(LL)i*((LL)acm[i].x-(LL)acm[i-1].x);
    			}
    		}
    		tmp=0;
    		for(int i=n-1;i>=0;i--){
    			if(i==n-1){
    				tmp=0;
    				distx[acm[i].num]+=tmp;
    			}
    			else {
    				tmp=tmp+(LL)(n-1-i)*((LL)acm[i+1].x-(LL)acm[i].x);
    				distx[acm[i].num]+=tmp;
    			}
    		}
    		sort(acm,acm+n,cmpy);
    		for(int i=0;i<n;i++){
    			if(!i)
    			disty[acm[i].num]=tmp=0;
    			else{
    				disty[acm[i].num]=tmp=tmp+(LL)i*((LL)acm[i].y-(LL)acm[i-1].y);
    			}
    		}
    		for(int i=n-1;i>=0;i--){
    			if(i==n-1){
    				tmp=0;
    				disty[acm[i].num]+=tmp;
    			}
    			else {
    				tmp=tmp+(LL)(n-1-i)*((LL)acm[i+1].y-(LL)acm[i].y);
    				disty[acm[i].num]+=tmp;
    			}
    		}
    		LL ans=distx[0]+disty[0];
    		for(int i=1;i<n;i++)
    		ans=mint(ans,distx[i]+disty[i]);
    		printf("%I64d
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    C++程序算法题--N皇后
    C++程序算法题----迷宫(一)
    C++程序算法题----上台阶2
    cvpr论文爬取——热词云展示(WEB)
    Android项目——HttpUrlConnection上传文件(图片)
    世界疫情——懒加载优化
    第六周学习进度总结
    人月神话读书笔记(一)
    团队项目——铁大百晓生(视频会议讨论)
    构建之法读书笔记(三)
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4059668.html
Copyright © 2011-2022 走看看