不知道为什么无法通过,想请大佬给出我程序的漏洞
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n, m;
cin >> n >> m;
vector<int> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
sort(arr.begin(), arr.end()); // 对数组排序
unordered_map<int, int> nowMap;
int now = 0; // MEX 值
int i = 0;
for (i = 0; i < n; i++) {
int cur = arr[i];
int curMod = cur % m; // 当前数对 m 取模的结果
int temp = now % m; // 当前 MEX 值对 m 取模的结果
if (cur != now) { // 如果当前元素和 MEX 值不相等,进行处理
if (nowMap[temp] > 0) { // 检查当前 MEX % m 是否可以递增
nowMap[temp]--;
nowMap[curMod]++;
now++;
continue;
}
if (now < arr[i]) { // 无法增加 MEX 值
break;
} else { // 将当前数的模数增加到 map
nowMap[curMod]++;
if (nowMap[temp] > 0) {
nowMap[temp]--;
now++;
}
}
} else { // 如果 arr[i] 等于当前 MEX 值,直接增加 MEX
now++;
}
}
// 处理剩余的可以递增的元素
while (nowMap[now % m] > 0) {
nowMap[now % m]--;
now++;
}
cout << now << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}