链接:http://www.lightoj.com/volume_showproblem.php?problem=1349

先将点上的价值累加,然后将有价值的点有序排序,只要累加和为总价值的一般即可  二维的也正是将x与y分开计算

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<math.h>
#include<string>
#include<map>
#include<vector>
using namespace std;
#define LL long long
#define N 100006
struct node
{
    int e,f,g;
}a[N];
int cmp1(node e,node f)
{
    return e.e<f.e;
}
int cmp2(node e,node f)
{
    return e.f<f.f;
}
int main()
{
    int T,t=1;
    scanf("%d",&T);
    while(T--)
    {
        int n,m,q;
        LL sum=0;
        scanf("%d%d%d",&n,&m,&q);
        for(int i=0;i<q;i++)
        {
            scanf("%d%d%d",&a[i].e,&a[i].f,&a[i].g);
            sum+=a[i].g;
        }
        sort(a,a+q,cmp1);
        sum=sum/2;
        LL ans=0;
        int x,y;
        for(int i=0;i<q;i++)
        {
            ans+=a[i].g;
            if(ans>sum)
            {
                x=a[i].e;
                break;
            }
        }
        ans=0;
        sort(a,a+q,cmp2);
        for(int i=0;i<q;i++)
        {
            ans+=a[i].g;
            if(ans>sum)
            {
                y=a[i].f;
                break;
            }
        }
        printf("Case %d: %d %d\n",t++,x,y);
    }
    return 0;
}
 

 

posted on 2017-10-17 15:32  云胡不喜。  阅读(107)  评论(0编辑  收藏  举报