Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2223 Accepted Submission(s):
510
#include<stdio.h> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<algorithm> #define LL long long #define MAX 1100 using namespace std; int main() { LL t,n,m,j,i,k; LL x,a1,b1,c; LL s[1100],a[MAX],b[MAX]; scanf("%lld",&t); while(t--) { scanf("%lld",&m); a1=b1=c=0; for(i=0;i<m;i++) { scanf("%lld",&s[i]); if(s[i]<0) a[a1++]=s[i]; else if(s[i]>0) b[b1++]=s[i]; else c++; } LL sum1=1; LL sum2=1; if(c==m)//只输入0 { printf("0\n"); continue; } if(m==1)//只输入一个数 { printf("%lld\n",s[0]); continue; } sort(a,a+a1); sort(b,b+b1); for(i=0;i<b1;i++)//正数和 sum1*=b[i]; if(a1%2==0)//偶数个负数的话,所有负数乘 { for(i=0;i<a1;i++) sum2*=a[i]; } else //奇数个负数,最大的负数不乘 for(i=0;i<a1-1;i++) sum2*=a[i]; if(c!=0&&b1==0&&a1==1)//输入1个负数和0 { printf("0\n"); continue; } printf("%lld\n",sum1*sum2); } return 0; }
原文:http://www.cnblogs.com/tonghao/p/5020719.html