Submission #229310

# Submission time Handle Problem Language Result Execution time Memory
229310 2020-05-04T07:19:09 Z 534351 Lokahian Relics (FXCUP4_lokahia) C++17
77 / 100
6 ms 768 KB
#include "lokahia.h"
#include <bits/stdc++.h>

using namespace std;

template<class T, class U>
void ckmin(T &a, U b)
{
    if (a > b) a = b;
}

template<class T, class U>
void ckmax(T &a, U b)
{
    if (a < b) a = b;
}

#define MP make_pair
#define PB push_back
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define SZ(x) ((int) (x).size())
#define ALL(x) (x).begin(), (x).end()
#define FOR(i, a, b) for (auto i = (a); i < (b); i++)
#define FORD(i, a, b) for (auto i = (a) - 1; i >= (b); i--)

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpi;
typedef vector<pll> vpl;

map<int, int> mp[213];

int ask(int i, int j)
{
    if (mp[i].count(j))
    {
        return mp[i][j];
    }
    int res = CollectRelics(i, j);
    mp[i][j] = res;
    mp[j][i] = res;
    return res;
}
int FindBase(int N)
{
    if (N == 1)
    {
        return 0;
    }
    if (N == 2)
    {
        return ask(0, 1);
    }
    int maj = -1, cnt = 0;
    FOR(i, 0, N - 1)
    {
        if (cnt == 0)
        {
            maj = i;
            cnt++;
        }
        else
        {
            int w = ask(maj, i);
            if (w == -1)
            {
                cnt--;
            }
            else
            {
                maj = i;
                cnt++;
            }
        }
    }
    if (cnt == 0) maj = N - 1;
    cnt = 1;
    int net = 1;
    int res = maj; int mx = -1;
    FOR(i, 0, N)
    {
        if (i == maj) continue;
        int w = ask(maj, i);
        if (w != -1)
        {
            ckmax(mx, w);
            cnt++;
            if (w == res)
            {
                net++;
            }
            else
            {
                net--;
                if (net == 0)
                {
                    res = w;
                    net = 1;
                }
            }
        }
    }
    if (cnt <= N / 2) return -1;
    assert(mx <= res);
    return res;
}
# Verdict Execution time Memory Grader output
1 Correct 5 ms 640 KB Correct : C = 223
2 Partially correct 5 ms 640 KB Partially correct : C = 396
3 Partially correct 5 ms 640 KB Partially correct : C = 309
4 Partially correct 5 ms 640 KB Partially correct : C = 384
5 Correct 5 ms 640 KB Correct : C = 234
6 Partially correct 6 ms 640 KB Partially correct : C = 379
7 Correct 5 ms 640 KB Correct : C = 178
8 Correct 5 ms 640 KB Correct : C = 298
9 Correct 5 ms 640 KB Correct : C = 228
10 Partially correct 5 ms 768 KB Partially correct : C = 380
11 Partially correct 5 ms 640 KB Partially correct : C = 317
12 Correct 5 ms 512 KB Correct : C = 6
13 Partially correct 6 ms 640 KB Partially correct : C = 382
14 Partially correct 5 ms 640 KB Partially correct : C = 394
15 Partially correct 5 ms 640 KB Partially correct : C = 394
16 Correct 5 ms 640 KB Correct : C = 222
17 Correct 5 ms 640 KB Correct : C = 297
18 Correct 5 ms 640 KB Correct : C = 236
19 Correct 5 ms 640 KB Correct : C = 177
20 Correct 5 ms 640 KB Correct : C = 233
21 Partially correct 6 ms 640 KB Partially correct : C = 393
22 Partially correct 5 ms 640 KB Partially correct : C = 386
23 Correct 5 ms 512 KB Correct : C = 0
24 Correct 5 ms 640 KB Correct : C = 227
25 Partially correct 5 ms 640 KB Partially correct : C = 383
26 Correct 5 ms 640 KB Correct : C = 233
27 Partially correct 5 ms 640 KB Partially correct : C = 387