Submission #936314

# Submission time Handle Problem Language Result Execution time Memory
936314 2024-03-01T14:54:55 Z peterandvoi Gondola (IOI14_gondola) C++17
65 / 100
23 ms 7456 KB
#include <bits/stdc++.h>

#include "gondola.h"

using namespace std;

#ifdef ngu
#include "debug.h"
#else
#define debug(...) 42
#endif

const int N = 250005;

int shift(int i, int j, int n) {
    i += j;
    if (i < 1) {
        i += n;
    }
    if (i > n) {
        i -= n;
    }
    return i;
}

int valid(int n, int inputSeq[]) {
    int delta = 0;
    for (int i = 0; i < n; ++i) {
        if (inputSeq[i] <= n) {
            int j = inputSeq[i];
            delta = j - i - 1;
            break;
        }
    }
    for (int i = 0; i < n; ++i) {
        if (inputSeq[i] <= n) {
            int j = shift(i + 1, delta, n);
            if (j != inputSeq[i]) {
                return 0;
            }
        }
    }
    return 1;
}

int pos[N];

int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
    memset(pos, -1, sizeof(pos));
    for (int i = 0; i < n; ++i) {
        pos[gondolaSeq[i]] = i;
    }
    set<int> cur;
    for (int i = 0; i < n; ++i) {
        cur.insert(i);
    }
    for (int i = 0; i < n; ++i) {
        if (gondolaSeq[i] <= n) {
            cur.erase(i);
        }
    }
    int delta = 0;
    for (int i = 0; i < n; ++i) {
        if (gondolaSeq[i] <= n) {
            int j = gondolaSeq[i];
            delta = j - i - 1;
            break;
        }
    }
    for (int i = 0; i < n; ++i) {
        gondolaSeq[i] = shift(i + 1, delta, n);
    }
    int m = -1;
    for (int i = n + 1; i < N; ++i) {
        if (!cur.size()) {
            break;
        }
        int j = *cur.begin();
        if (pos[i] != -1) {
            j = pos[i];
            cur.erase(j);
        }
        replacementSeq[++m] = gondolaSeq[j];
        gondolaSeq[j] = i;
    }
    return m + 1;
}

const int MOD = (int) 1e9 + 9;

int countReplacement(int n, int inputSeq[]) {
    if (valid(n, inputSeq) == 0) {
        return 0;
    }
    memset(pos, -1, sizeof(pos));
    for (int i = 0; i < n; ++i) {
        pos[inputSeq[i]] = i;
    }
    int cnt = n;
    for (int i = 0; i < n; ++i) {
        if (inputSeq[i] <= n) {
            cnt--;
        }
    }
    int res = 1;
    int delta = 0;
    for (int i = 0; i < n; ++i) {
        if (inputSeq[i] <= n) {
            int j = inputSeq[i];
            delta = j - i - 1;
            break;
        }
    }
    for (int i = 0; i < n; ++i) {
        inputSeq[i] = shift(i + 1, delta, n);
    }
    if (n == 2 && cnt < 2) {
        return 1;
    }
    for (int i = n + 1; i < N; ++i) {
        if (!cnt) {
            break;
        }
        if (pos[i] != -1) {
            cnt--;
        } else {
            res = 1LL * res * cnt % MOD;
        }
    }
    if (n == 2) {
        res = 1LL * res * 2 % MOD;
    }
    return res;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 0 ms 2396 KB Output is correct
3 Correct 0 ms 2492 KB Output is correct
4 Correct 1 ms 2644 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2648 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2392 KB Output is correct
6 Correct 3 ms 2708 KB Output is correct
7 Correct 7 ms 2908 KB Output is correct
8 Correct 6 ms 2908 KB Output is correct
9 Correct 2 ms 2396 KB Output is correct
10 Correct 6 ms 2908 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2392 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2400 KB Output is correct
6 Correct 3 ms 2652 KB Output is correct
7 Correct 9 ms 3012 KB Output is correct
8 Correct 6 ms 2908 KB Output is correct
9 Correct 2 ms 2396 KB Output is correct
10 Correct 6 ms 2908 KB Output is correct
11 Incorrect 1 ms 2496 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2652 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 1 ms 2648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2648 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 1 ms 2492 KB Output is correct
5 Correct 1 ms 2652 KB Output is correct
6 Correct 1 ms 2652 KB Output is correct
7 Correct 1 ms 2652 KB Output is correct
8 Correct 1 ms 2648 KB Output is correct
9 Correct 1 ms 2652 KB Output is correct
10 Correct 1 ms 2648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2648 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2648 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 1 ms 2652 KB Output is correct
6 Correct 1 ms 2496 KB Output is correct
7 Correct 1 ms 2652 KB Output is correct
8 Correct 1 ms 2652 KB Output is correct
9 Correct 1 ms 2488 KB Output is correct
10 Correct 1 ms 2652 KB Output is correct
11 Correct 20 ms 6792 KB Output is correct
12 Correct 23 ms 7456 KB Output is correct
13 Correct 20 ms 4696 KB Output is correct
14 Correct 20 ms 6748 KB Output is correct
15 Correct 19 ms 4620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2648 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 1 ms 2652 KB Output is correct
6 Correct 1 ms 2652 KB Output is correct
7 Correct 1 ms 2652 KB Output is correct
8 Correct 1 ms 2648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 1 ms 2656 KB Output is correct
5 Correct 1 ms 2652 KB Output is correct
6 Correct 1 ms 2652 KB Output is correct
7 Correct 1 ms 2652 KB Output is correct
8 Correct 1 ms 2652 KB Output is correct
9 Correct 7 ms 3116 KB Output is correct
10 Correct 6 ms 2904 KB Output is correct
11 Correct 3 ms 2652 KB Output is correct
12 Correct 3 ms 2652 KB Output is correct
13 Incorrect 3 ms 2904 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 1 ms 2652 KB Output is correct
6 Correct 1 ms 2652 KB Output is correct
7 Correct 1 ms 2652 KB Output is correct
8 Correct 1 ms 2652 KB Output is correct
9 Correct 7 ms 2988 KB Output is correct
10 Correct 6 ms 2908 KB Output is correct
11 Correct 3 ms 2648 KB Output is correct
12 Correct 3 ms 2652 KB Output is correct
13 Incorrect 2 ms 2504 KB Output isn't correct
14 Halted 0 ms 0 KB -