Submission #945063

# Submission time Handle Problem Language Result Execution time Memory
945063 2024-03-13T11:11:57 Z alextodoran Super Dango Maker (JOI22_dango3) C++17
7 / 100
204 ms 656 KB
/**
 _  _   __  _ _ _  _  _ _
 |a  ||t  ||o    d | |o  |
| __    _| | _ | __|  _ |
| __ |/_  | __  /__\ / _\|

**/

#include <bits/stdc++.h>
#include "dango3.h"

using namespace std;

typedef long long ll;

int Query (const vector <int> &x);
void Answer (const vector <int> &a);

void Solve (int N, int M) {
    int A[N * M + 2];
    fill(A + 1, A + N * M + 1, 0);
    int l = 1, r = N * M;
    while (l < r) {
        int mid = (l + r) / 2;
        vector <int> x;
        for (int i = 1; i <= mid; i++) {
            x.push_back(i);
        }
        if (Query(x) > 0) {
            r = mid;
        } else {
            l = mid + 1;
        }
    }
    bool in[N * M + 2];
    fill(in + 1, in + N * M + 1, false);
    for (int i = 1; i <= l; i++) {
        in[i] = true;
    }
    vector <int> group;
    for (int i = N * M; i >= 1; i--) {
        if (in[i] == true) {
            in[i] = false;
            vector <int> x;
            for (int j = 1; j <= N * M; j++) {
                if (in[j] == true) {
                    x.push_back(j);
                }
            }
            if (Query(x) == 0) {
                in[i] = true;
            }
        }
    }
    for (int i = 1; i <= N * M; i++) {
        if (in[i] == true) {
            group.push_back(i);
            A[i] = (int) group.size();
        }
    }
    for (int k : group) {
        deque <int> unknown;
        for (int i = k + 1; i <= N * M; i++) {
            if (A[i] == 0) {
                unknown.push_back(i);
            }
        }
        while (unknown.empty() == false) {
            int l = 0, r = (int) unknown.size();
            while (l < r) {
                int mid = (l + r) / 2;
                vector <int> x;
                for (int i = 0; i <= mid; i++) {
                    x.push_back(unknown[i]);
                }
                for (int i : group) {
                    if (A[i] != A[k]) {
                        x.push_back(i);
                    }
                }
                if (Query(x) > 0) {
                    r = mid;
                } else {
                    l = mid + 1;
                }
            }
            if (l == (int) unknown.size()) {
                break;
            }
            A[unknown[l]] = A[k];
            k = unknown[l];
            while (unknown.empty() == false && unknown.front() <= k) {
                unknown.pop_front();
            }
        }
    }
    vector <int> of_color[N + 2];
    for (int i = 1; i <= N * M; i++) {
        of_color[A[i]].push_back(i);
    }
    for (int t = 1; t <= M; t++) {
        vector <int> a;
        for (int c = 1; c <= N; c++) {
            a.push_back(of_color[c].back());
            of_color[c].pop_back();
        }
        Answer(a);
    }
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 344 KB Output is correct
2 Correct 9 ms 344 KB Output is correct
3 Correct 10 ms 348 KB Output is correct
4 Correct 10 ms 348 KB Output is correct
5 Correct 7 ms 348 KB Output is correct
6 Correct 7 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 95 ms 564 KB Output is correct
2 Correct 94 ms 600 KB Output is correct
3 Incorrect 162 ms 600 KB Wrong Answer [3]
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 204 ms 656 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -