题目为:https://www.luogu.com.cn/problem/CF2021B
不知道代码为何不能通过,已经自己梳理的很长时间
想请各位大佬给指点一下迷津,感谢!!!
我的代码为
private static void solve() {
int n, m;
n = in.nextInt();
m = in.nextInt();
int[] arr = in.readArray(n);
Arrays.sort(arr);
Map<Integer, Integer> nowMap = new HashMap<>();
int now = 0;
int i;
for (i = 0; i < arr.length; i++) {
int cur = arr[i];
int curMod = cur % m;
int temp = now % m;
// 如果当前的数值与now不相等,进行处理
if (cur != now) {
// 检查当前 MEX 值的 mod m 是否能增加
if (nowMap.getOrDefault(temp, 0) > 0) {
nowMap.put(temp, nowMap.get(temp) - 1);
nowMap.put(curMod, nowMap.getOrDefault(curMod, 0) + 1);
now++;
continue;
}
// 如果 now 小于 arr[i],说明没有办法增加该 MEX 值
if (now < arr[i]) {
break;
} else {
// 否则,可以增加该元素到 nowMap,并继续处理
nowMap.put(curMod, nowMap.getOrDefault(curMod, 0) + 1);
if (nowMap.getOrDefault(temp, 0) > 0) {
nowMap.put(temp, nowMap.get(temp) - 1);
now++;
}
}
} else {
// 如果 arr[i] 已经等于 now,直接增加
now++;
}
}
// 处理剩余的可以增加的元素
while (nowMap.getOrDefault(now % m, 0) > 0) {
nowMap.put(now % m, nowMap.get(now % m) - 1);
now++;
}
out.print(now + "\n");
}