时间之流-题解

描述

每个人的时间长河里面,都有几个重要的关键时间点,以数字的形式呈现在长河之中,当每个人的这些数字都聚集在一起的时候,就汇聚成了一条庞大的时间之流。

而你们的任务就是在这满是时间数字的流之中,选定部分时间数字相乘,并使其乘积最终的结果最大。

注意:时间数字之中可能会出现负数及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;
}

时间之流-题解
https://chenxi-tijie.pages.dev/2025/07/时间之流-题解/
作者
chenxi
发布于
2025年7月5日
许可协议