传送门: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;
}
最后修改:2024 年 04 月 07 日
如果觉得我的文章对你有用,请随意赞赏