Submission #65213583


Source Code Expand

//#pragma GCC optimize("Ofast")
//#pragma GCC target("avx,avx2,fma")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,avx,avx2,popcnt,tune=native")
#include <bits/stdc++.h>
 
using namespace std;
 
#define all(v) (v).begin(), (v).end()
#define sz(a) ((long long)(a).size())
#define X first
#define Y second
// #define endl '\n'
 
using ll = long long;
using ull = unsigned long long;
using dbl = long double;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll myRand(ll myRandMod) {
    return (ull)rng() % myRandMod;
}
 
const ll INF = 1e9;
const ll LINF = 1e18;
const int MOD = (int)1e9 + 7;
const int MAXN = 4e5 + 555;

const int N = 20;
const int M = 40;
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
const char dir[] = {'U', 'D', 'L', 'R'};
const int INF_SIZE = 1000;

struct Point {
    int x, y;
    Point(int x = 0, int y = 0) : x(x), y(y) {}
    bool operator==(const Point& other) const {
        return x == other.x && y == other.y;
    }
};

vector<Point> targets;
vector<vector<char>> grid;
vector<vector<pair<char, char>>> actions;

// Precalculated slide destinations for each position and direction
vector<vector<vector<Point>>> slide_dest;

bool isValid(int x, int y) {
    return x >= 0 && x < N && y >= 0 && y < N;
}

void precalculateSlides() {
    slide_dest.assign(N, vector<vector<Point>>(N, vector<Point>(4)));
    
    for (int x = 0; x < N; x++) {
        for (int y = 0; y < N; y++) {
            for (int d = 0; d < 4; d++) {
                int nx = x;
                int ny = y;
                while (true) {
                    int nextX = nx + dx[d];
                    int nextY = ny + dy[d];
                    if (!isValid(nextX, nextY) || grid[nextX][nextY] == 'B') {
                        break;
                    }
                    nx = nextX;
                    ny = nextY;
                }
                slide_dest[x][y][d] = Point(nx, ny);
            }
        }
    }
}

vector<pair<char, char>> findPath(Point start, Point end, const vector<vector<char>>& grid) {
    vector<vector<int>> dist(N, vector<int>(N, INF));
    vector<vector<pair<char, char>>> prev_action(N, vector<pair<char, char>>(N));
    vector<vector<Point>> prev_pos(N, vector<Point>(N));
    queue<Point> q;
    
    dist[start.x][start.y] = 0;
    q.push(start);
    
    while (!q.empty()) {
        Point cur = q.front();
        q.pop();
        
        if (cur == end) break;
        
        // Try all possible moves and slides
        for (int d = 0; d < 4; d++) {
            // Try move
            int nx = cur.x + dx[d];
            int ny = cur.y + dy[d];
            
            if (isValid(nx, ny) && grid[nx][ny] != 'B' && dist[nx][ny] > dist[cur.x][cur.y] + 1) {
                dist[nx][ny] = dist[cur.x][cur.y] + 1;
                prev_action[nx][ny] = {'M', dir[d]};
                prev_pos[nx][ny] = cur;
                q.push(Point(nx, ny));
            }
            
            // Try slide using precalculated destination
            Point slideEnd = slide_dest[cur.x][cur.y][d];
            if (slideEnd != cur && dist[slideEnd.x][slideEnd.y] > dist[cur.x][cur.y] + 1) {
                dist[slideEnd.x][slideEnd.y] = dist[cur.x][cur.y] + 1;
                prev_action[slideEnd.x][slideEnd.y] = {'S', dir[d]};
                prev_pos[slideEnd.x][slideEnd.y] = cur;
                q.push(slideEnd);
            }
        }
    }
    
    if (dist[end.x][end.y] == INF) {
        return vector<pair<char, char>>(INF_SIZE);
    }
    
    vector<pair<char, char>> path;
    Point cur = end;
    while (cur != start) {
        path.push_back(prev_action[cur.x][cur.y]);
        cur = prev_pos[cur.x][cur.y];
    }
    reverse(all(path));
    
    // Verify path
    /*
    Point pos = start;
    for (auto [action, direction] : path) {
        int d = static_cast<int>(find(dir, dir + 4, direction) - dir);
        if (action == 'M') {
            pos.x += dx[d];
            pos.y += dy[d];
            if (!isValid(pos.x, pos.y) || grid[pos.x][pos.y] == 'B') {
                cerr << "Invalid move in path: " << action << " " << direction << " at (" << pos.x << "," << pos.y << ")" << endl;
                cerr << "Grid state:" << endl;
                for (int x = 0; x < N; x++) {
                    for (int y = 0; y < N; y++) {
                        cerr << (grid[x][y] == 'B' ? 'B' : '.');
                    }
                    cerr << endl;
                }
                assert(false);
                return vector<pair<char, char>>(INF_SIZE);
            }
        } else if (action == 'S') {
            pos = slide_dest[pos.x][pos.y][d];
        }
    }
    */
    
    return path;
}

double sum_path_length = 0;

int n, m;

void read_input() {
    cin >> n >> m;
    
    targets.resize(m);
    for (int i = 0; i < m; i++) {
        cin >> targets[i].x >> targets[i].y;
    }
}

void generate_input() {
    n = 20;
    m = 40;
    targets.resize(m);
    vector<Point> all_points;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            all_points.push_back(Point(i, j));
        }
    }
    random_shuffle(all(all_points));
    for (int i = 0; i < m; i++) {
        targets[i] = all_points[i];
    }
}

void print_ans() {
    for (int i = 0; i < m; i++) {
        for (auto [a, dc] : actions[i]) {
            cout << a << " " << dc << endl;
        }
    }
}

void print_input() {
    cout << n << " " << m << endl;
    for (int i = 0; i < m; i++) {
        cout << targets[i].x << " " << targets[i].y << endl;
    }
    cout << endl;
}

auto calc_slide_dest(int x, int y, int d) {
    int nx = x;
    int ny = y;
    while (true) {
        int nextX = nx + dx[d];
        int nextY = ny + dy[d];
        if (!isValid(nextX, nextY) || grid[nextX][nextY] == 'B') {
            break;
        }
        nx = nextX;
        ny = nextY;
    }   
    return make_pair(nx, ny);
}

bool is_target[N][N];

void solve(bool need_cout = true) {
    grid.assign(N, vector<char>(N, '.'));
    precalculateSlides();

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            is_target[i][j] = false;
        }
    }
    for (int i = 0; i < m; i++) {
        is_target[targets[i].x][targets[i].y] = true;
    }
    

    // Initial solution without alter operations
    actions.clear();
    actions.push_back({});
    for (int i = 1; i < m; i++) {
        vector<pair<char, char>> path = findPath(targets[i-1], targets[i], grid);
        actions.push_back(path);
    }
    // Calculate total number of actions in the solution
    auto countTotalActions = [&]() -> int {
        int total = 0;
        for (const auto& path : actions) {
            total += (int)path.size();
        }
        return total;
    };
    
    cerr << "initial actions size: " << countTotalActions() << endl;

    // cerr << targets[7].x << " " << targets[7].y << endl;
    // cerr << targets[8].x << " " << targets[8].y << endl;
    
    // Optimization phase
    for (int i = 1; i < m; i++) {
        cerr << "optimization phase " << i << " start" << endl;
        cerr << "time = " << clock() / (double)CLOCKS_PER_SEC << endl;
        bool improved = true;
        int iter = 0;

        vector<Point> cur_iter_blocked;
        while (improved) {
            improved = false;
            int bestDelta = 0;
            Point bestPos;
            // cerr << "i = " << i << " iter = " << iter << endl;
            
            // vector<pair<char, char>> currentPath = findPath(targets[i-1], targets[i], grid);
            // assert(currentPath.size() == actions[i].size());
            // assert(currentPath.size() != INF_SIZE);
            auto currentPath = actions[i];
            // Precalculate which cells we'll visit in the current path
            vector<vector<int>> willVisit(N, vector<int>(N, 0));
            Point pos = targets[i-1];
            ++willVisit[pos.x][pos.y];

            // cerr << "precalculate willVisit" << endl;
            // cerr << "currentPath = " << currentPath.size() << endl;

            for (auto p : cur_iter_blocked) {
                grid[p.x][p.y] = (grid[p.x][p.y] == 'B' ? '.' : 'B');
                willVisit[p.x][p.y] = 1000;
            }
            
            for (auto [a, dc] : currentPath) {
                int d = static_cast<int>(find(dir, dir + 4, dc) - dir);
                if (a == 'M') {
                    pos.x += dx[d];
                    pos.y += dy[d];
                } else if (a == 'S') {
                    int sx, sy;
                    tie(sx, sy) = calc_slide_dest(pos.x, pos.y, d);
                    assert(isValid(sx, sy));
                    int stx = min(pos.x, sx);
                    int enx = max(pos.x, sx);
                    int sty = min(pos.y, sy);
                    int eny = max(pos.y, sy);
                    for (int q = stx; q <= enx; ++q) {
                        for (int w = sty; w <= eny; ++w) {
                            assert(isValid(q, w));
                            ++willVisit[q][w];
                        }
                    }
                    pos = Point(sx, sy);
                    int tx = pos.x + dx[d];
                    int ty = pos.y + dy[d];
                    if (isValid(tx, ty)) {
                        ++willVisit[tx][ty];
                    }
                } else if (a == 'A') {
                    int tx = pos.x + dx[d];
                    int ty = pos.y + dy[d];
                    assert(isValid(tx, ty));
                    assert(!is_target[tx][ty]);
                    ++willVisit[tx][ty];
                    grid[tx][ty] = (grid[tx][ty] == 'B' ? '.' : 'B');
                }
                assert(isValid(pos.x, pos.y));
                ++willVisit[pos.x][pos.y];
            }
            if (pos != targets[i]) {
                print_input();
                print_ans();
            }
            assert(pos == targets[i]);
            precalculateSlides();
            // cerr << "precalculate willVisit end" << endl;
            
            // Try placing blocks along the path
            pos = targets[i-1];
            vector<vector<bool>> triedBlock(N, vector<bool>(N, false));
            
            
            int insertPos = -1;
            char insertDir;
            int currentPathIt = -1;
            // cerr << "currentPath = " << currentPath.size() << endl;

            cerr << "try to find insert position" << endl;
            for (auto [a, dc] : currentPath) {
                ++currentPathIt;

                // cerr << "currentPathIt = " << currentPathIt << endl;
                int d = static_cast<int>(find(dir, dir + 4, dc) - dir);
                if (a == 'M') {
                    pos.x += dx[d];
                    pos.y += dy[d];
                } else if (a == 'S') {
                    pos = slide_dest[pos.x][pos.y][d];
                    int tx = pos.x + dx[d];
                    int ty = pos.y + dy[d];
                    if (isValid(tx, ty)) {
                        // --willVisit[tx][ty];
                    }
                }
                static auto prevA = a;
                --willVisit[pos.x][pos.y];
                // if (a == 'A' || prevA == 'A') {
                //     continue;
                // }
                prevA = a;
                
                // Try placing/removing block in each direction
                for (int d1 = 0; d1 < 4; d1++) {
                    int nx = pos.x + dx[int(d1)];
                    int ny = pos.y + dy[int(d1)];
                    
                    // Check if the position is valid and we won't visit it later
                    if (isValid(nx, ny) && !willVisit[nx][ny] && !triedBlock[nx][ny]) {
                        if (is_target[nx][ny]) {
                            continue;
                        }
                        triedBlock[nx][ny] = true;
                        
                        // Toggle the block state
                        grid[nx][ny] = (grid[nx][ny] == 'B' ? '.' : 'B');
                        
                        // Recalculate slides after grid change
                        precalculateSlides();
                        
                        // Calculate new path lengths
                        int delta = 1;
                        for (int j = i + 1; j < m; j++) {
                            vector<pair<char, char>> path = findPath(targets[j - 1], targets[j], grid);
                            delta += static_cast<int>(path.size()) - static_cast<int>(actions[j].size());
                        }
                        
                        // Revert block change
                        grid[nx][ny] = (grid[nx][ny] == 'B' ? '.' : 'B');
                        
                        // Recalculate slides after reverting
                        precalculateSlides();
                        
                        if (delta < bestDelta) {
                            insertPos = currentPathIt + 1;
                            insertDir = dir[d1];

                            bestDelta = delta;
                            bestPos = Point(nx, ny);
                        }
                    }
                }
            }
            if (bestDelta < 0) {
                improved = true;
                grid[bestPos.x][bestPos.y] = (grid[bestPos.x][bestPos.y] == 'B' ? '.' : 'B');
                assert(!is_target[bestPos.x][bestPos.y]);
                cur_iter_blocked.push_back(bestPos);
                
                // Recalculate slides after final grid change
                precalculateSlides();

                // Insert block placement action at the saved position
                cerr << "insertPos = " << insertPos << " " << actions[i].size() << endl;
                if (insertPos != -1) {
                    assert(insertPos <= (int)actions[i].size());
                    actions[i].insert(actions[i].begin() + insertPos, {'A', insertDir});
                } else {
                    assert(false);
                }
                
                // if (i == 7) {
                //     int cnt = 0;
                //     for (int l = 0; l < i; ++l) {
                //         cnt += actions[l].size();
                //     }
                //     cerr << "cnt = " << cnt << endl;
                //     cerr << "actions[i].size() = " << actions[i].size() << endl;
                //     for (auto [a, dc] : actions[i]) {
                //         cerr << a << " " << dc << endl;
                //     }
                // }
                
                // Update actions for remaining paths
                // cerr << "update actions for remaining paths" << endl;
                for (int j = i + 1; j < m; j++) {
                    vector<pair<char, char>> path = findPath(targets[j - 1], targets[j], grid);
                    assert(path.size() != INF_SIZE);
                    actions[j] = path;
                }
            }
        }
        // cerr << "optimization phase " << i << " end" << endl;
    }
    
    cerr << "final actions size: " << countTotalActions() << endl;
    sum_path_length += countTotalActions();
    if (need_cout) {    
        // Output the solution
        for (auto path : actions) {
            for (auto [action, direction] : path) {
                assert(action == 'M' || action == 'S' || action == 'A');
                assert(direction == 'U' || direction == 'D' || direction == 'L' || direction == 'R');
                cout << action << " " << direction << "\n";
            }
        }
    }
}

const int STRESS = 0;
 
signed main() {
#ifdef LOCAL
    assert(freopen("in.txt", "r", stdin));
    assert(freopen("out.txt", "w", stdout));
#endif
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(20);
 
    int T = 1;
    // cin >> T;
    if (STRESS) {
        T = 10;
    }
    for (int numt = 0; numt < T; ++numt) {
        if (STRESS) {
            generate_input();
            solve(false);
        } else {
            read_input();
            solve(true);
        }
    }
    double avg_path_len = sum_path_length / (double)T;
    cerr << "avg path length = " << avg_path_len<< endl;
    cerr << "avg path_per_target length = " << avg_path_len / (double)M << endl;
    cerr << "score = " << (M + 2 * N * M - avg_path_len) * 150 << endl;
 
#ifdef LOCAL
    cerr << endl << endl << "time = " << clock() / (double)CLOCKS_PER_SEC << endl;
#endif
}

Submission Info

Submission Time
Task A - Skating with Blocks
User mHuman
Language C++ 20 (gcc 12.2)
Score 217600
Code Size 17002 Byte
Status AC
Exec Time 170 ms
Memory 4072 KiB

Compile Error

Main.cpp: In function ‘void solve(bool)’:
Main.cpp:355:29: warning: variable ‘prevA’ set but not used [-Wunused-but-set-variable]
  355 |                 static auto prevA = a;
      |                             ^~~~~
Main.cpp:258:13: warning: unused variable ‘iter’ [-Wunused-variable]
  258 |         int iter = 0;
      |             ^~~~
In file included from /usr/include/c++/12/bits/stl_algobase.h:64,
                 from /usr/include/c++/12/bits/specfun.h:45,
                 from /usr/include/c++/12/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/12/bits/stdc++.h:41,
                 from Main.cpp:4:
In constructor ‘constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&) [with _U1 = char; _U2 = char&; _T1 = char; _T2 = char]’,
    inlined from ‘void solve(bool)’ at Main.cpp:416:38:
/usr/include/c++/12/bits/stl_pair.h:281:42: warning: ‘insertDir’ may be used uninitialized [-Wmaybe-uninitialized]
  281 |         : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y))
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp: In function ‘void solve(bool)’:
Main.cpp:334:18: note: ‘insertDir’ was declared here
  334 |             char insertDir;
      |                  ^~~~~~~~~

Judge Result

Set Name test_ALL
Score / Max Score 217600 / 246000
Status
AC × 150
Set Name Test Cases
test_ALL test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt, test_0100.txt, test_0101.txt, test_0102.txt, test_0103.txt, test_0104.txt, test_0105.txt, test_0106.txt, test_0107.txt, test_0108.txt, test_0109.txt, test_0110.txt, test_0111.txt, test_0112.txt, test_0113.txt, test_0114.txt, test_0115.txt, test_0116.txt, test_0117.txt, test_0118.txt, test_0119.txt, test_0120.txt, test_0121.txt, test_0122.txt, test_0123.txt, test_0124.txt, test_0125.txt, test_0126.txt, test_0127.txt, test_0128.txt, test_0129.txt, test_0130.txt, test_0131.txt, test_0132.txt, test_0133.txt, test_0134.txt, test_0135.txt, test_0136.txt, test_0137.txt, test_0138.txt, test_0139.txt, test_0140.txt, test_0141.txt, test_0142.txt, test_0143.txt, test_0144.txt, test_0145.txt, test_0146.txt, test_0147.txt, test_0148.txt, test_0149.txt
Case Name Status Exec Time Memory
test_0000.txt AC 135 ms 3972 KiB
test_0001.txt AC 110 ms 3784 KiB
test_0002.txt AC 121 ms 3852 KiB
test_0003.txt AC 142 ms 3916 KiB
test_0004.txt AC 128 ms 3956 KiB
test_0005.txt AC 95 ms 3964 KiB
test_0006.txt AC 120 ms 4004 KiB
test_0007.txt AC 133 ms 4068 KiB
test_0008.txt AC 134 ms 3972 KiB
test_0009.txt AC 142 ms 3920 KiB
test_0010.txt AC 157 ms 3920 KiB
test_0011.txt AC 124 ms 3820 KiB
test_0012.txt AC 90 ms 3936 KiB
test_0013.txt AC 94 ms 3968 KiB
test_0014.txt AC 101 ms 3980 KiB
test_0015.txt AC 122 ms 3964 KiB
test_0016.txt AC 101 ms 3912 KiB
test_0017.txt AC 108 ms 4004 KiB
test_0018.txt AC 111 ms 3788 KiB
test_0019.txt AC 103 ms 4072 KiB
test_0020.txt AC 120 ms 4004 KiB
test_0021.txt AC 105 ms 3780 KiB
test_0022.txt AC 167 ms 3920 KiB
test_0023.txt AC 144 ms 3920 KiB
test_0024.txt AC 111 ms 3916 KiB
test_0025.txt AC 110 ms 3912 KiB
test_0026.txt AC 154 ms 3952 KiB
test_0027.txt AC 131 ms 3992 KiB
test_0028.txt AC 90 ms 3912 KiB
test_0029.txt AC 158 ms 4004 KiB
test_0030.txt AC 84 ms 3952 KiB
test_0031.txt AC 109 ms 3924 KiB
test_0032.txt AC 115 ms 3968 KiB
test_0033.txt AC 120 ms 3848 KiB
test_0034.txt AC 103 ms 3960 KiB
test_0035.txt AC 106 ms 3824 KiB
test_0036.txt AC 95 ms 3984 KiB
test_0037.txt AC 136 ms 3964 KiB
test_0038.txt AC 134 ms 3952 KiB
test_0039.txt AC 130 ms 3912 KiB
test_0040.txt AC 107 ms 3856 KiB
test_0041.txt AC 87 ms 3988 KiB
test_0042.txt AC 127 ms 3908 KiB
test_0043.txt AC 109 ms 3924 KiB
test_0044.txt AC 121 ms 4004 KiB
test_0045.txt AC 87 ms 3852 KiB
test_0046.txt AC 100 ms 3972 KiB
test_0047.txt AC 114 ms 3852 KiB
test_0048.txt AC 143 ms 3972 KiB
test_0049.txt AC 88 ms 4008 KiB
test_0050.txt AC 70 ms 3916 KiB
test_0051.txt AC 101 ms 3988 KiB
test_0052.txt AC 148 ms 3916 KiB
test_0053.txt AC 104 ms 3972 KiB
test_0054.txt AC 124 ms 3956 KiB
test_0055.txt AC 116 ms 3968 KiB
test_0056.txt AC 129 ms 3980 KiB
test_0057.txt AC 88 ms 3960 KiB
test_0058.txt AC 158 ms 3784 KiB
test_0059.txt AC 115 ms 3912 KiB
test_0060.txt AC 86 ms 3916 KiB
test_0061.txt AC 107 ms 3948 KiB
test_0062.txt AC 107 ms 3828 KiB
test_0063.txt AC 139 ms 3928 KiB
test_0064.txt AC 101 ms 3824 KiB
test_0065.txt AC 112 ms 3852 KiB
test_0066.txt AC 142 ms 3964 KiB
test_0067.txt AC 170 ms 3956 KiB
test_0068.txt AC 91 ms 3908 KiB
test_0069.txt AC 130 ms 4064 KiB
test_0070.txt AC 107 ms 3916 KiB
test_0071.txt AC 117 ms 3820 KiB
test_0072.txt AC 92 ms 3924 KiB
test_0073.txt AC 107 ms 3968 KiB
test_0074.txt AC 124 ms 3924 KiB
test_0075.txt AC 128 ms 3920 KiB
test_0076.txt AC 97 ms 3856 KiB
test_0077.txt AC 108 ms 3964 KiB
test_0078.txt AC 112 ms 3920 KiB
test_0079.txt AC 103 ms 3960 KiB
test_0080.txt AC 121 ms 3976 KiB
test_0081.txt AC 83 ms 3980 KiB
test_0082.txt AC 126 ms 3920 KiB
test_0083.txt AC 146 ms 3976 KiB
test_0084.txt AC 106 ms 3952 KiB
test_0085.txt AC 134 ms 3956 KiB
test_0086.txt AC 93 ms 3928 KiB
test_0087.txt AC 118 ms 3912 KiB
test_0088.txt AC 121 ms 3960 KiB
test_0089.txt AC 121 ms 3968 KiB
test_0090.txt AC 137 ms 4004 KiB
test_0091.txt AC 110 ms 3980 KiB
test_0092.txt AC 118 ms 3936 KiB
test_0093.txt AC 147 ms 4068 KiB
test_0094.txt AC 117 ms 3784 KiB
test_0095.txt AC 130 ms 3924 KiB
test_0096.txt AC 114 ms 4072 KiB
test_0097.txt AC 111 ms 3820 KiB
test_0098.txt AC 137 ms 4068 KiB
test_0099.txt AC 104 ms 3948 KiB
test_0100.txt AC 83 ms 3916 KiB
test_0101.txt AC 79 ms 3784 KiB
test_0102.txt AC 123 ms 3848 KiB
test_0103.txt AC 92 ms 4068 KiB
test_0104.txt AC 138 ms 3980 KiB
test_0105.txt AC 129 ms 3916 KiB
test_0106.txt AC 152 ms 3824 KiB
test_0107.txt AC 128 ms 3828 KiB
test_0108.txt AC 136 ms 3852 KiB
test_0109.txt AC 113 ms 3964 KiB
test_0110.txt AC 117 ms 3972 KiB
test_0111.txt AC 114 ms 3848 KiB
test_0112.txt AC 128 ms 3996 KiB
test_0113.txt AC 129 ms 3976 KiB
test_0114.txt AC 113 ms 3924 KiB
test_0115.txt AC 116 ms 3848 KiB
test_0116.txt AC 106 ms 3824 KiB
test_0117.txt AC 132 ms 3924 KiB
test_0118.txt AC 135 ms 4008 KiB
test_0119.txt AC 136 ms 3968 KiB
test_0120.txt AC 103 ms 3828 KiB
test_0121.txt AC 137 ms 4000 KiB
test_0122.txt AC 87 ms 3976 KiB
test_0123.txt AC 119 ms 3912 KiB
test_0124.txt AC 88 ms 3824 KiB
test_0125.txt AC 81 ms 3924 KiB
test_0126.txt AC 85 ms 3964 KiB
test_0127.txt AC 103 ms 3860 KiB
test_0128.txt AC 135 ms 4072 KiB
test_0129.txt AC 106 ms 3960 KiB
test_0130.txt AC 121 ms 4068 KiB
test_0131.txt AC 80 ms 3916 KiB
test_0132.txt AC 104 ms 3964 KiB
test_0133.txt AC 123 ms 4064 KiB
test_0134.txt AC 142 ms 3924 KiB
test_0135.txt AC 112 ms 3920 KiB
test_0136.txt AC 91 ms 3928 KiB
test_0137.txt AC 113 ms 3960 KiB
test_0138.txt AC 83 ms 3964 KiB
test_0139.txt AC 103 ms 3972 KiB
test_0140.txt AC 134 ms 3912 KiB
test_0141.txt AC 111 ms 3820 KiB
test_0142.txt AC 133 ms 3968 KiB
test_0143.txt AC 108 ms 3920 KiB
test_0144.txt AC 164 ms 3964 KiB
test_0145.txt AC 108 ms 3784 KiB
test_0146.txt AC 131 ms 3916 KiB
test_0147.txt AC 104 ms 4068 KiB
test_0148.txt AC 126 ms 4004 KiB
test_0149.txt AC 129 ms 3920 KiB