답안 #770760

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
770760 2023-07-01T21:37:29 Z adrilen 열대 식물원 (Tropical Garden) (IOI11_garden) C++17
69 / 100
651 ms 262144 KB
#include "garden.h"
#include "gardenlib.h"
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using arr = array<int, 2>;
using arrr = array<int, 3>;

constexpr int maxn = 1.5e5, maxg = 1e9, maxq = 2e3 + 5, bit = 32 - __builtin_clz(maxg), siz = 1 << bit;
int goal;

basic_string <int> adj[maxn];

// Jumping (1 << i) steps from each node, taking the best way or the second
// store whether we need to use the best or second best route
arr jump[bit][maxn][2] = { 0 };




void count_routes(int n, int m, int P, int R[][2], int Q, int G[])
{
    goal = P;

    for (int i = 0; i < m; i++)
    {
        adj[R[i][0]].push_back(R[i][1]);
        adj[R[i][1]].push_back(R[i][0]);
    }

    // Making the only way a second way if needed
    for (int i = 0; i < n; i++)
    {
        if (adj[i].size() == 1) adj[i].push_back(adj[i][0]);
    }


    for (int i = 0; i < n; i++)
    {
        for (int y = 0; y < 2; y++)
        {
            jump[0][i][y] = {adj[i][y], adj[adj[i][y]][0] == i};
        }
    }

    for (int b = 1; b < bit; b++)
    {
        for (int i = 0; i < n; i++)
        {
            for (int y = 0; y < 2; y++)
            {
                jump[b][i][y] = jump[b - 1][jump[b - 1][i][y][0]][jump[b - 1][i][y][1]];
            }
        }
    }

    vector <arr> queries(Q);

    for (int i = 0; i < Q; i++) queries[i] = { G[i], i };
    sort(queries.begin(), queries.end());

    arr pos;

    map<arr, int> pos_count[maxq];
    for (int i = 0; i < n; i++) pos_count[0][{i, 0}] = 1;

    int last = 0;
    int diff;


    vector <int> output(Q);


    for (int y = 0; y < Q; y++)     // 2e3
    {
        diff = queries[y][0] - last;

        for (auto pa : pos_count[y])
        {
            pos = pa.first;
            for (int j = 0; j < bit; j++) // 30
            {
                if (diff & (1 << j)) pos = jump[j][pos[0]][pos[1]];
            }
            pos_count[y + 1][pos] += pa.second;
        }
        output[queries[y][1]] = pos_count[y + 1][{P, 0}] + pos_count[y + 1][{P, 1}];
        last = queries[y][0];
    }


    for (int i: output) answer(i);
}


# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5716 KB Output is correct
2 Correct 3 ms 5844 KB Output is correct
3 Correct 3 ms 5844 KB Output is correct
4 Correct 3 ms 5332 KB Output is correct
5 Correct 3 ms 5332 KB Output is correct
6 Correct 3 ms 5972 KB Output is correct
7 Correct 2 ms 5332 KB Output is correct
8 Correct 4 ms 5848 KB Output is correct
9 Correct 4 ms 5972 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5716 KB Output is correct
2 Correct 3 ms 5844 KB Output is correct
3 Correct 3 ms 5844 KB Output is correct
4 Correct 3 ms 5332 KB Output is correct
5 Correct 3 ms 5332 KB Output is correct
6 Correct 3 ms 5972 KB Output is correct
7 Correct 2 ms 5332 KB Output is correct
8 Correct 4 ms 5848 KB Output is correct
9 Correct 4 ms 5972 KB Output is correct
10 Correct 2 ms 5332 KB Output is correct
11 Correct 19 ms 18260 KB Output is correct
12 Correct 34 ms 26452 KB Output is correct
13 Correct 69 ms 56552 KB Output is correct
14 Correct 102 ms 79028 KB Output is correct
15 Correct 103 ms 80076 KB Output is correct
16 Correct 82 ms 56520 KB Output is correct
17 Correct 62 ms 48744 KB Output is correct
18 Correct 38 ms 26196 KB Output is correct
19 Correct 104 ms 79060 KB Output is correct
20 Correct 97 ms 79988 KB Output is correct
21 Correct 79 ms 56524 KB Output is correct
22 Correct 63 ms 48688 KB Output is correct
23 Correct 132 ms 87736 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5716 KB Output is correct
2 Correct 3 ms 5844 KB Output is correct
3 Correct 3 ms 5844 KB Output is correct
4 Correct 3 ms 5332 KB Output is correct
5 Correct 3 ms 5332 KB Output is correct
6 Correct 3 ms 5972 KB Output is correct
7 Correct 2 ms 5332 KB Output is correct
8 Correct 4 ms 5848 KB Output is correct
9 Correct 4 ms 5972 KB Output is correct
10 Correct 2 ms 5332 KB Output is correct
11 Correct 19 ms 18260 KB Output is correct
12 Correct 34 ms 26452 KB Output is correct
13 Correct 69 ms 56552 KB Output is correct
14 Correct 102 ms 79028 KB Output is correct
15 Correct 103 ms 80076 KB Output is correct
16 Correct 82 ms 56520 KB Output is correct
17 Correct 62 ms 48744 KB Output is correct
18 Correct 38 ms 26196 KB Output is correct
19 Correct 104 ms 79060 KB Output is correct
20 Correct 97 ms 79988 KB Output is correct
21 Correct 79 ms 56524 KB Output is correct
22 Correct 63 ms 48688 KB Output is correct
23 Correct 132 ms 87736 KB Output is correct
24 Correct 28 ms 14888 KB Output is correct
25 Runtime error 651 ms 262144 KB Execution killed with signal 9
26 Halted 0 ms 0 KB -