中位数——二维坐标下的中位数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
Digits of Factorial LightOJ - 1045