题目大意:给定一个序列,任选出序列中的数字,并输出其组成的最大数.
思路:就是一个简单的贪心吧,但是注意各组数据的各种坑.如当只有一个数的时候,permutation中含有0,
其中有负数,0,正数等等情况.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
#define ll __int64
#define inf 0x3f3f3f3f
using namespace std;
ll a[1000000];
int main()
{
ll n,m,i,j,k,mi,s;
ll cla,zero,fu;
scanf("%I64d",&cla);
while(cla--)
{
mi=-inf;zero=fu=0;
s=1;
scanf("%I64d",&n);bool vis=false;
for(i=0;i<n;i++)
{
scanf("%I64d",a+i);
if(a[i]!=0)
vis=true;
if(a[i]<0)
{
fu++;
mi=max(mi,a[i]);
}
if(!a[i])
zero++;
}
if(!vis)
{
printf("0\n");continue;
}
if(n==1)
{
printf("%I64d\n",a[0]);continue;
}
if(fu==1&&(fu==n-zero))
{
printf("0\n");
continue;
}
for(i=0;i<n;i++)
{
if(a[i])
s*=a[i];
}
if(s<0)
{
printf("%I64d\n",s/mi);continue;
}
printf("%I64d\n",s);
}
return 0;
}