中位数——二维坐标下的中位数lightoj1349

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中位数——二维坐标下的中位数lightoj1349相关的知识,希望对你有一定的参考价值。

第一次碰到这种题,不知所措,题解链接 =》 https://www.cnblogs.com/fu3638/p/7426074.html

#include<bits/stdc++.h>
using namespace std;
#define maxn 50005
struct Node{int x,y,num;}p[maxn];
int cmp1(Node a,Node b){return a.x<b.x;}
int cmp2(Node a,Node b){return a.y<b.y;}
int n,m,q;
int main(){
    int T;cin>>T;
    for(int tt=1;tt<=T;tt++){
        printf("Case %d: ",tt);
        
        int sum=0,mid;
        cin>>n>>m>>q;
        for(int i=1;i<=q;i++)
            cin>>p[i].x>>p[i].y>>p[i].num,sum+=p[i].num;
        mid=sum+1>>1;
        
        sort(p+1,p+1+q,cmp1);
        int tot=0,x=0,y=0;
        for(int i=1;i<=q;i++){
            tot+=p[i].num;
            if(tot>=mid){
                if(sum%2)x=p[i].x;//总数是奇数,那么中位数很好确定 
                else if(tot==mid)x=(p[i].x+p[i+1].x)/2;//总数是偶数,当前刚好卡在一半的位置 
                else x=p[i].x; 
            break;}
            
        }
        
        sort(p+1,p+1+q,cmp2);
        tot=0;
        for(int i=1;i<=q;i++){
            tot+=p[i].num;
            if(tot>=mid){
                if(sum%2)y=p[i].y;//总数是奇数,那么中位数很好确定 
                else if(tot==mid)y=(p[i].y+p[i+1].y)/2;//总数是偶数,当前刚好卡在一半的位置 
                else y=p[i].y; 
                break;
            }
        
        }
        cout<<x<<" "<<y<<endl;
    }
}

 

以上是关于中位数——二维坐标下的中位数lightoj1349的主要内容,如果未能解决你的问题,请参考以下文章

并不对劲的CF1349B&C:Game of Median Life

小白月赛22 G : 仓库地址

Digits of Factorial LightOJ - 1045

KDT的坑...

LightOJ 1282 Leading and Trailing 数论

假设客车的座位数是9行4列,使用二维数组在控制台应用程序中实现简单的客车售票系统。