# 组合优化 ## 题目描述 给定一个长为 $n$ 的整数序列 $a$,你需要找到另一个长度为 $n$ 的整数序列 $x$ 使得 $\prod\limits_{i = 1} ^ n x_i > 0$(也即 $x$ 的积要大于 $0$)且 $\sum\limits_{i = 1} |a_i - x_i|$ 最小 输出这个最小值 ## 输入格式 注意本题有多组数据 第一行一个整数 $T$ 表示测试数据组数 对每组数据第一行一个整数 $n$,接下来一行 $n$ 个整数表示 $a$ 序列 ## 输出格式 你的程序将会输出 $T$ 行 每行表示每组数据的答案 ## 样例 #1 ### 样例输入 #1 ``` 3 3 -3 -2 -2 9 9 9 8 2 4 4 3 5 3 3 0 0 0 ``` ### 样例输出 #1 ``` 3 0 3 ``` ## 提示 对所有测试点,保证 $1 \le T, n, \sum n \le 2 \times 10 ^ 5, -10 ^ 9 \le a_i \le 10 ^ 9$ 对于测试点 $1$,保证 $T,n,|a_i| \le 5$ 对于测试点 $2,3$,保证 $\sum n,|a_i|≤100$. 对于测试点 $4,5$,保证 $\sum n,|ai|≤1,000$ 对于测试点 $6$,保证对于每组测试数据,$\prod a_i≠0$ 对于测试点 $7$,保证对于每组测试数据,$\prod a_i=0$ 对于测试点 $8,9,10$,无特殊限制c++代码
时间: 2023-09-08 07:09:06 浏览: 126
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int neg = 0, pos = 0; // 记录负数和非负数的个数
for (int i = 0; i < n; i++) {
if (a[i] < 0) {
neg++;
} else {
pos++;
}
}
if (neg == 0 || pos == 0) {
cout << "0" << endl; // 如果全是负数或全是非负数,则答案为0
} else {
cout << "1" << endl; // 否则答案为1
}
}
return 0;
}
```
阅读全文