传送门:P10337 [UESTCPC 2024] 操作序列
更佳的阅读体验:洛谷 P10337 题解
简要题意:找到一个最大的整数 $k$,使得任意次在序列中选择 $k$ 个不同的位置,这些位置的数乘上相同的非零整数,最终所有数相等。
我们分两种情况考虑:
- 序列中所有数都相等时:给整个序列同时乘任意一个相同数就可以保持所有数都相等,$k$ 直接取 $n$ 即可。
- 序列中所有数不相等时:因为给 $n - 1$ 个数同时乘一个数,相当于给剩下的数除以这个数,因此总有使序列中所有数相等的方案,$k$ 取 $n - 1$。
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int t, n, a[N];
bool flag;
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
for (cin >> t; t; --t) {
flag = false;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
if (i > 1 && a[i] != a[i - 1]) flag = true;
} cout << n - flag << '\n';
} return 0;
}