Submission #49764

# Submission time Handle Problem Language Result Execution time Memory
49764 2018-06-02T21:19:02 Z gs13105 Tropical Garden (IOI11_garden) C++17
Compilation error
0 ms 0 KB
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <tuple>
#include <iterator>

using namespace std;

const int MAXN = 150000;

int arr[2 * MAXN + 10];
int dis[2][2 * MAXN + 10];
bool chk[2][2 * MAXN + 10];

void f(int x, int p)
{
    chk[p % 2][x] = 1;
    if(arr[x] == p)
    {
        dis[p % 2][x] = 1;
        return;
    }

    if(!chk[p % 2][arr[x]])
        f(arr[x], p);

    if(dis[p%2][arr[x]])
        dis[p % 2][x] = dis[p % 2][arr[x]] + 1;
}

int mem[MAXN + 10][2];
int sum[2][2 * MAXN + 10];

void count_routes(int N, int M, int P, int R[][2], int Q, int G[])
{
    memset(mem, -1, sizeof mem);
    memset(arr, -1, sizeof arr);
    for(int i = 0; i < M; i++)
    {
        int x = R[i][0];
        int y = R[i][1];

        if(mem[x][0] == -1)
            mem[x][0] = y;
        else if(mem[x][1] == -1)
            mem[x][1] = y;

        if(mem[y][0] == -1)
            mem[y][0] = x;
        else if(mem[y][1] == -1)
            mem[y][1] = x;
    }

    for(int i = 0; i < N; i++)
    {
        if(mem[mem[i][0]][0] == i && mem[mem[i][0]][1] != -1)
            arr[2 * i] = 2 * mem[i][0] + 1;
        else
            arr[2 * i] = 2 * mem[i][0];

        if(mem[i][1] != -1)
        {
            if(mem[mem[i][1]][0] == i && mem[mem[i][1]][1] != -1)
                arr[2 * i + 1] = 2 * mem[i][1] + 1;
            else
                arr[2 * i + 1] = 2 * mem[i][1];
        }
    }

    for(int r = 0; r < 2; r++)
        for(int i = 0; i < 2 * N; i++)
            if(!chk[r][i] && arr[i] != -1)
                f(i, 2 * P + r);

    for(int r = 0; r < 2; r++)
        for(int i = 0; i < N; i++)
            if(dis[r][2 * i])
                sum[r][dis[r][2 * i]]++;

    for(int r = 0; r < 2; r++)
    {
        int c = dis[r][2 * P + r];
        if(!c)
            continue;

        for(int i = 1; i <= 2 * N; i++)
            if(c && i - c >= 1)
                sum[r][i] += sum[r][i - c];
    }

    int c = max(dis[0][2 * P], dis[1][2 * P + 1]);
    for(int i = 0; i < Q; i++)
    {
        int t = G[i];
        if(t > 2 * N && c)
            t -= ((t - 2 * N + c - 1) / c) * c;

        if(t > 2 * N)
            answer(0);
        else
            answer(sum[0][t] + sum[1][t]);
    }
}

Compilation message

garden.cpp: In function 'void count_routes(int, int, int, int (*)[2], int, int*)':
garden.cpp:110:13: error: 'answer' was not declared in this scope
             answer(0);
             ^~~~~~
garden.cpp:110:13: note: suggested alternative: 'assert'
             answer(0);
             ^~~~~~
             assert
garden.cpp:112:13: error: 'answer' was not declared in this scope
             answer(sum[0][t] + sum[1][t]);
             ^~~~~~
garden.cpp:112:13: note: suggested alternative: 'assert'
             answer(sum[0][t] + sum[1][t]);
             ^~~~~~
             assert