第一次碰到这种题,不知所措,题解链接 =》
#includeusing namespace std;#define maxn 50005struct Node{ int x,y,num;}p[maxn];int cmp1(Node a,Node b){ return a.x >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< <<" "< <