zoukankan      html  css  js  c++  java
  • LightOJ 1349 Aladdin and the Optimal Invitation(中位数)

    题目链接:https://vjudge.net/contest/28079#problem/N

    题目大意:给一个mxn的平面,有q个位置,每个位置坐标为(u,v)有w人,求一个点在平面内使得所有人都到这个点的曼哈顿距离之和最小(如 (x, y) 到 (p, q),那曼哈顿距离就是|x-p|+|y-q|)。

    解题思路:分别按横纵坐标排序找出中位数即可(中位数请自行百度)。

    代码:

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 const int N=5e5+5;
     5 
     6 struct node{
     7     int x,y,cnt;
     8 }a[N];
     9 
    10 bool cmp1(node a,node b){
    11     return a.x<b.x;
    12 }
    13 
    14 bool cmp2(node a,node b){
    15     return a.y<b.y; 
    16 }
    17 
    18 int main(){
    19     int T;
    20     scanf("%d",&T);
    21     int cas=0;
    22     while(T--){
    23         int m,n,q,x,y;
    24         scanf("%d%d%d",&m,&n,&q);
    25         int xsum=0,ysum=0,count=0;
    26         for(int i=1;i<=q;i++){
    27             scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].cnt);
    28             count+=a[i].cnt;
    29         }
    30         int mid=(count+1)/2;
    31         //按横坐标排序 
    32         sort(a+1,a+q+1,cmp1);
    33         int sum=0;
    34         for(int i=1;i<=q;i++){
    35             sum+=a[i].cnt;
    36             if(sum>=mid){            
    37                 if(count&1)
    38                     x=a[i].x;
    39                 else{
    40                     if(sum==mid)
    41                         x=(a[i].x+a[i+1].x)/2;
    42                     else
    43                         x=a[i].x;
    44                 }            
    45                 break;
    46             }
    47         }
    48         //按纵坐标排序 
    49         sort(a+1,a+q+1,cmp2);
    50         sum=0;
    51         for(int i=1;i<=q;i++){
    52             sum+=a[i].cnt;
    53             if(sum>=mid){
    54                 if(count&1)
    55                     y=a[i].y;
    56                 else{
    57                     if(sum==mid)
    58                         y=(a[i].y+a[i+1].y)/2;
    59                     else
    60                         y=a[i].y;
    61                 }
    62                     
    63                 break;
    64             }
    65         }    
    66         printf("Case %d: %d %d
    ",++cas,x,y);
    67     }
    68 }
  • 相关阅读:
    AJAX从后台接收的字符串如何与前台字符串比较
    ojdbc6.jar导入maven依赖失败(亲测有效)
    IDEA怎样创建maven项目
    yum下载rpm包以及相关依赖包
    pip离线安装包
    Python的print的底层实现
    django查询集-17
    django的数据库操作-16
    django数据库迁移-15
    django定义模型类-14
  • 原文地址:https://www.cnblogs.com/fu3638/p/7426074.html
Copyright © 2011-2022 走看看