1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
#include<iostream> #include<algorithm> #include<vector> #include<string.h> #include<math.h> #define sum first #define id second #define PI (cos(-1)) using namespace std; typedef pair<int,int> pii; typedef long long ll; const int INF=0x3f3f3f3f; const int Maxn = 500005; const double eps=1e-8; int (double x) { if(fabs(x)<eps) return 0; return x>0?1:-1; } struct node{ double x,y,thera,val; bool operator <(const node &t)const { return thera<t.thera; } }po[Maxn]; int main() { int T,n; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lf%lf%lf",&po[i].x,&po[i].y,&po[i].val); if(po[i].x==0) po[i].thera=PI/2.0; else po[i].thera=atan(po[i].y/po[i].x); } sort(po+1,po+n+1); ll rsum=0,lsum=0; for(int i=1;i<=n;i++) { if(dcmp(po[i].x)>=0) rsum+=po[i].val; else lsum+=po[i].val; } ll ans=lsum*rsum; for(int i=1;i<=n;i++) { if(po[i].x>=0) rsum-=po[i].val,lsum+=po[i].val; else rsum+=po[i].val,lsum-=po[i].val; ans=max(ans,lsum*rsum); } printf("%lldn",ans); } return 0; } 以x为中心的 ************************************************** #include<bits/stdc++.h> #define N 50006 using namespace std; const double pi=acos(-1.0); struct point { long long x,y,v; bool flag; }a[N]; bool cmp(point b,point c) { double xx,yy; xx=atan2((double)b.y,(double)b.x); yy=atan2((double)c.y,(double)c.x); return xx<yy; } int main() { int t,n; long long sum1=0,sum2=0; scanf("%d",&t); while(t--) { sum1=0,sum2=0; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].v); if(a[i].y<0) { sum1+=a[i].v; a[i].x*=-1; a[i].y*=-1; a[i].flag=false; } else a[i].flag=true,sum2+=a[i].v; } sort(a,a+n,cmp); long long ans=sum1*sum2; for(int i=0;i<n;i++) { if(a[i].flag) { sum2-=a[i].v; sum1+=a[i].v; } else { sum1-=a[i].v; sum2+=a[i].v; } ans=max(ans,sum1*sum2); } cout<<ans<<endl; } return 0; }
|
近期评论