您的位置:首页 > 大数据 > 人工智能

2017 Multi-University Training Contest - Team 7 hard challenge

2017-08-16 19:21 393 查看
比赛的时候没有主攻这道题,其实这个题目的关键是那个 l * r 大家都没想出来,遗憾。

角度排序,枚举角度即可。这里利用对称性进行了代码优化。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#include<cstdlib>
using namespace std;

typedef struct node
{
double ang;
int x,y,val;
bool operator <(const node t) const
{
return ang<t.ang;
}
}node;
vector<node> se;

int main()
{
freopen("fuck.txt","r",stdin);
int T,n;
scanf("%d",&T);
for(int Case=1;Case<=T;Case++)
{
se.clear();
scanf("%d",&n);
long long l=0,r=0,ans=0;
for(int i=1;i<=n;i++)
{
int a,b,c;
node te;
scanf("%d%d%d",&a,&b,&c);
te.x=a;
te.y=b;
te.ang=atan(double(b)/a);
te.val=c;
se.push_back(te);
}

sort(se.begin(),se.end());

for(int i=0;i<se.size();i++)
{
if(se[i].x>=0) r+=se[i].val;
else l+=se[i].val;
}
ans=l*r;
for(int i=0;i<se.size();i++)
{
if(se[i].x>=0)
{
r-=se[i].val;
l+=se[i].val;
}
else
{
l-=se[i].val;
r+=se[i].val;
}
ans=max(ans,l*r);
}
printf("%lld\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐