GT and sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 571 Accepted Submission(s): 129
Problem Description
You are given a sequence of
N
integers.
You should choose some numbers(at least one),and make the product of them as big as possible.
It guaranteed that **the absolute value of** any product of the numbers you choose in the initial sequence will not bigger than 263−1 .
You should choose some numbers(at least one),and make the product of them as big as possible.
It guaranteed that **the absolute value of** any product of the numbers you choose in the initial sequence will not bigger than 263−1 .
Input
In the first line there is a number
T
(test numbers).
For each test,in the first line there is a number N ,and in the next line there are N numbers.
1≤T≤1000
1≤N≤62
You'd better print the enter in the last line when you hack others.
You'd better not print space in the last of each line when you hack others.
For each test,in the first line there is a number N ,and in the next line there are N numbers.
1≤T≤1000
1≤N≤62
You'd better print the enter in the last line when you hack others.
You'd better not print space in the last of each line when you hack others.
Output
For each test case,output the answer.
Sample Input
1 3 1 2 3
Sample Output
6
Source
出题人:
注意先特判0的情况:如果读入的数据有0,
那么去掉所有的0且最后答案和0取一个max。
剩下的正数显然全部乘起来比较优。对于负数的话,
如果个数是奇数个我们就去掉绝对值最小的那一个,然后全部乘起来即可。
当时SB了,没考遇到0的情况。以后要仔细读题,弄懂题意再敲代码 !!!!!
#include
#include
#include
#include
#include
#include
using namespace std; long long a[120]; int main() { long long sumd,x,zero,sumx,maxn; int i,t,n,flag; scanf("%d",&t); while(t--) { sumx=sumd=1; maxn=0; zero=flag=0; scanf("%d",&n); for(i=0; i
0)sumd*=x; if(x<0) { flag++; if(flag==1) maxn=x; maxn=max(x,maxn); sumx*=x; } if(x==0) zero++; } if(n==1) { printf("%lld\n",x); continue; } if(flag%2) sumx/=maxn; if(zero==n-1&&maxn<0||zero==n) sumx=0; printf("%lld\n",sumx*sumd); } return 0; }