链接: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 ",t++,x,y); } return 0; }