求助-CF2021B-求一组HACK样例,或者讲解。
  • 板块学术版
  • 楼主x1uc
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/17 21:46
  • 上次更新2024/12/17 22:37:01
查看原帖
求助-CF2021B-求一组HACK样例,或者讲解。
648695
x1uc楼主2024/12/17 21:46

题目为: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");
    }
2024/12/17 21:46
加载中...