Submission #677406

# Submission time Handle Problem Language Result Execution time Memory
677406 2023-01-03T08:03:30 Z jhwest2 None (JOI15_memory) C++17
30 / 100
6000 ms 419216 KB
#include "Memory_lib.h"
#include <bits/stdc++.h>
using namespace std;

namespace {
    const int N = 100;
    const int B = 1 << 22;

    bool init = false;

    int sz = 0;
    array<int, 5> a[B];
    map<array<int, 5>, int> mp;

    void initialize(int n) {
        for (int rev = 0; rev <= 1; rev++)
            for (int s = 1; s <= n; s++)
                for (int t = 1; t <= n; t++)
                    for (int x = 0; x <= n / 2; x++)
                        for (int y = 0; y <= n / 2; y++)
                            if (((!rev && s <= t) || (rev && s >= t)) && (x + y) % 2 == abs(t - s) % 2 && x + y <= abs(t - s)) 
                                a[sz++] = {rev, s, t, x, y};
        
        for (int i = 0; i < sz; i++) 
            mp[a[i]] = i;
    }

}
int Memory(int n, int m) {
    if (!init) {
        init = true;
        initialize(n);
    }
    if (m >= sz)
        return -2;

    auto [rev, s, t, x, y] = a[m];

    char c = Get(t);

    if (!rev) {
        if (s == t && (c == '>' || c == ']')) {
            if (s != n) {
                s = s + 1;
                t = t + 1;
                return mp[{rev, s, t, x, y}];
            }
            else {
                rev = 1;
                s = n;
                t = n;
                return mp[{rev, s, t, x, y}];
            }
        }
        else {
            if (c == '[')
                ++x;
            if (c == ']')
                --x;
            if (c == '<')
                ++y;
            if (c == '>')
                --y;

            if (x < 0 || y < 0 || x > n / 2 || y > n / 2)
                return -2;
            else {
                if (x != 0 || y != 0) {
                    t = t + 1;

                    if (t == n + 1)
                        return -2;
                    else 
                        return mp[{rev, s, t, x, y}];
                }
                else {
                    if (s != n) {
                        s = s + 1;
                        t = s;
                        x = 0;
                        y = 0;
                        return mp[{rev, s, t, x, y}];
                    }
                    else {
                        return mp[{1, n, n, 0, 0}];
                    }
                }
            }
        }
    }
    else {
        if (s == t && (c == '<' || c == '[')) {
            if (s != 1) {
                s = s - 1;
                t = t - 1;
                return mp[{rev, s, t, x, y}];
            }
            else 
                return -1;
        }
        else {
            if (c == ']')
                ++x;
            if (c == '[')
                --x;
            if (c == '>')
                ++y;
            if (c == '<')
                --y;

            if (x < 0 || y < 0 || x > n / 2 || y > n / 2)
                return -2;
            else {
                if (x != 0 || y != 0) {
                    t = t - 1;

                    if (t == 0)
                        return -2;
                    else 
                        return mp[{rev, s, t, x, y}];
                }
                else {
                    if (s != 1) {
                        s = s - 1;
                        t = s;
                        x = 0;
                        y = 0;
                        return mp[{rev, s, t, x, y}];
                    }
                    else
                        return -1;
                }
            }
        }
    }
}
# Verdict Execution time Memory Grader output
1 Correct 2039 ms 284148 KB Output is correct
2 Correct 2070 ms 284108 KB Output is correct
3 Correct 2057 ms 284172 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2039 ms 284148 KB Output is correct
2 Correct 2070 ms 284108 KB Output is correct
3 Correct 2057 ms 284172 KB Output is correct
4 Correct 2084 ms 284284 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2039 ms 284148 KB Output is correct
2 Correct 2070 ms 284108 KB Output is correct
3 Correct 2057 ms 284172 KB Output is correct
4 Correct 2084 ms 284284 KB Output is correct
5 Correct 2059 ms 285640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2039 ms 284148 KB Output is correct
2 Correct 2070 ms 284108 KB Output is correct
3 Correct 2057 ms 284172 KB Output is correct
4 Correct 2084 ms 284284 KB Output is correct
5 Correct 2059 ms 285640 KB Output is correct
6 Correct 2154 ms 287124 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 6102 ms 419216 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2039 ms 284148 KB Output is correct
2 Correct 2070 ms 284108 KB Output is correct
3 Correct 2057 ms 284172 KB Output is correct
4 Correct 2084 ms 284284 KB Output is correct
5 Correct 2059 ms 285640 KB Output is correct
6 Correct 2154 ms 287124 KB Output is correct
7 Execution timed out 6102 ms 419216 KB Time limit exceeded
8 Halted 0 ms 0 KB -