답안 #44570

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
44570 2018-04-03T10:55:37 Z ssnsarang2023 Zagonetka (COI18_zagonetka) C++17
0 / 100
328 ms 496 KB
#define debug

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> ii;

#define SZ(x) ((int)x.size())

int n, a[105], b[105], pos[105], deg[105];
bool adj[105][105];

bool ask() {
    queue<int> q;
    fill(deg + 1, deg + n + 1, 0);
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            if (adj[i][j]) {
                ++deg[j];
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (!deg[i]) {
            q.push(i);
        }
    }
    int idx = 0;
    while (SZ(q)) {
        int u = q.front(); q.pop();
        b[u] = ++idx;
        for (int v = 1; v <= n; ++v) {
            if (!adj[u][v]) continue;
            --deg[v];
            if (!deg[v]) {
                q.push(v);
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (deg[i]) {
            return 0;
        }
    }
    printf("query ");
    for (int i = 1; i <= n; ++i) {
        printf("%d ", b[i]);
    }
    fflush(stdout);
    int re = 0;
    scanf("%d", &re);
    return re;
}

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
        pos[a[i]] = i;
        for (int j = 1; j < i; ++j) {
            bool re = a[j] < a[i];
            if (re) {
                adj[j][i] = 1;
            } else {
                adj[i][j] = 1;
            }
        }
    }
    for (int i = 1; i < n; ++i) {
        for (int j = 1; j <= n - i; ++j) {
            int x = pos[j], y = pos[j + i];
            adj[x][y] = 0, adj[y][x] = 1;
            bool re = ask();
            adj[y][x] = 0, adj[x][y] = !re;
        }
    }
    set<int> q;
    fill(deg + 1, deg + n + 1, 0);
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            if (adj[i][j]) {
                ++deg[j];
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (!deg[i]) {
            q.insert(i);
        }
    }
    int idx = 1;
    while (SZ(q)) {
        int u = *q.begin();
        q.erase(q.begin());
        a[u] = idx++;
        for (int v = 1; v <= n; ++v) {
            if (!adj[u][v]) continue;
            --deg[v];
            if (!deg[v]) {
                q.insert(v);
            }
        }
    }
    fill(deg + 1, deg + n + 1, 0);
    for (int i = 1; i <= n; ++i) {
        for (int j = i + 1; j <= n; ++j) {
            swap(adj[i][j], adj[j][i]);
        }
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            if (adj[i][j]) {
                ++deg[j];
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (!deg[i]) {
            q.insert(i);
        }
    }
    idx = n;
    while (SZ(q)) {
        int u = *q.begin();
        q.erase(q.begin());
        b[u] = idx--;
        for (int v = 1; v <= n; ++v) {
            if (!adj[u][v]) continue;
            --deg[v];
            if (!deg[v]) {
                q.insert(v);
            }
        }
    }
    printf("end\n");
    for (int i = 1; i <= n; ++i) {
        printf("%d ", a[i]);
    }
    printf("\n");
    for (int i = 1; i <= n; ++i) {
        printf("%d ", b[i]);
    }
    fflush(stdout);
    return 0;
}

Compilation message

zagonetka.cpp: In function 'bool ask()':
zagonetka.cpp:53:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &re);
     ~~~~~^~~~~~~~~~~
zagonetka.cpp: In function 'int main()':
zagonetka.cpp:58:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
zagonetka.cpp:60:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &a[i]);
         ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 21 ms 496 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 496 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 328 ms 496 KB Output isn't correct
2 Halted 0 ms 0 KB -