Largest Point
题目
样例
思路
使用自定义降序map,分别存入att和b*t及其初始输入顺序,然后分同取最大值和取重两种情况讨论。
代码
#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
struct cmp
{
bool operator()(const ll& k1,const ll& k2)
{
return k1>k2;
}
};
map<ll,int,cmp> aa,bb;
int main()
{
int t,cnt=1;
scanf("%d",&t);
while(t--)
{
aa.clear();
bb.clear();
int n;
ll a,b;
scanf("%d %lld %lld",&n,&a,&b);
long long sum=0;
for(int i=0;i<n;i++)
{
ll x;
scanf("%lld",&x);
aa[a*x*x]=bb[b*x]=i;
}
printf("Case #%d: ",cnt++);
map<ll,int,cmp>::iterator ia=aa.begin(),ib=bb.begin();
if((int)aa.begin()->second==(int)bb.begin()->second)
{
map<ll,int,cmp>::iterator iaa=ia;
printf("%lld\n",max( (++ia)->first+ib->first , iaa->first+(++ib)->first) );
}
else
printf("%lld\n",ia->first+ib->first);
}
return 0;
}