#include #include #include <unordered_set> #include

using namespace std;

int main() { int N; cin >> N;

vector<int> A(N);
for (int i = 0; i < N; i++) {
    cin >> A[i];
}

// 将序列排序
sort(A.begin(), A.end());

// 统计序列中不同的数的个数
unordered_set<int> uniqueNums;
for (int i = 0; i < N; i++) {
    uniqueNums.insert(A[i]);
}

// 遍历所有可能的 M 值,找到使得不同的数个数最少的 M 值
int minUniqueNums = N;
int bestM = 0;
for (int M = 1; M <= A[N-1]; M++) {
    unordered_set<int> modNums;
    for (int i = 0; i < N; i++) {
        modNums.insert(A[i] % M);
    }
    int uniqueCount = modNums.size();
    if (uniqueCount < minUniqueNums) {
        minUniqueNums = uniqueCount;
        bestM = M;
    }
}

cout << minUniqueNums << endl;

return 0;

}

用C++解决以下问题请注意时间限制为1秒:给定序列 A=A_1A_2A_3A_N你可以选择一个整数 M将每个数都变成 mod M 后的值使序列中不同的数尽量少。例如 A=274选择M=4则序列A 变成 230有3 个不同的数。2=N=210^5

原文地址: https://www.cveoy.top/t/topic/i10o 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录