描述
每个人的时间长河里面,都有几个重要的关键时间点,以数字的形式呈现在长河之中,当每个人的这些数字都聚集在一起的时候,就汇聚成了一条庞大的时间之流。
而你们的任务就是在这满是时间数字的流之中,选定部分时间数字相乘,并使其乘积最终的结果最大。
注意:时间数字之中可能会出现负数及0,他们代表一些人想要忘却的时间点。
由于时间的严谨,所有时间数字已经按照从小到大顺序升序排列。
输入描述
第一行输入数N,表示有N个时间数字
第二行输入N个整数。
输出描述
输出仅一行,即最大的乘积。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <bits/stdc++.h> using namespace std; int main() { long long n,ans=1,tmp; cin >> n; vector<long long>in; vector<long long>fushu; bool has_zero = false; for(int i = 0;i<n;i++){ cin >> tmp; if(tmp>0){ in.push_back(tmp); } if(tmp<0){ fushu.push_back(tmp); } if(tmp == 0){ has_zero = true; } } if(fushu.size()%2 == 0){ in.insert(in.end(), fushu.begin(), fushu.end()); }else{ in.insert(in.end(), fushu.begin(), fushu.end()-1); } for(int i= 0;i<in.size();i++){ ans *= in[i]; } if(in.size() == 0) { if(has_zero){ ans = 0; }else{ ans = fushu[0]; } } cout << ans; }
|