HDU GT and sequence (数的乘积最大)

来源:互联网 发布:ubuntu删除桌面文件夹 编辑:程序博客网 时间:2024/06/16 20:21


问题描述
给出NN个整数。你要选择至少一个数,使得你选的数的乘积最大。保证任意选一些数相乘的绝对值都不会大于2^{63}-12631
输入描述
第一行读入一个数TT表示数据组数。对于每组数据:第一行是一个数NN,第二行是NN个整数。1 \leq T \leq 10001T10001 \leq N \leq 621N62hack时建议输出最后一行的行末回车;每一行的结尾不要输出空格。
输出描述
对于每组数据,输出一个数表示最大的乘积。
输入样例
131 2 3
输出样例
6
<pre name="code" class="html">#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;ll a[111];int main(){    int i,j,t,n,n1,n2,n3;    ll ans,temp;    cin>>t;    while(t--) {        cin>>n;        n1=n2=n3=0;        for(i=0;i<n;i++) cin>>a[i];        sort(a,a+n);        for(i=0;i<n;i++) {            if(a[i]<0) n1++;            else if(a[i]==0) n2++;            else n3++;        }        if(n==1) {            cout<<a[0]<<endl;            continue;        }        ans=1;        for(i=0;i<n;i++) {            if(a[i]==0) continue;            ans=ans*a[i];        }        if(n2==n) {            cout<<"0"<<endl;            continue;        }        if(n3>0) {            if(n1%2) ans=ans/a[n1-1];            cout<<ans<<endl;            continue;        }        if(n1==1) {            cout<<"0"<<endl;            continue;        }        if(n1%2) {            cout<<ans/a[n1-1]<<endl;            continue;        }        cout<<ans<<endl;    }    return 0;}



0 0
原创粉丝点击