Submission #229290

# Submission time Handle Problem Language Result Execution time Memory
229290 2020-05-04T06:22:14 Z 534351 Lokahian Relics (FXCUP4_lokahia) C++17
0 / 100
6 ms 688 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 (i == j) return i;
    if (mp[i].count(j))
    {
        return mp[i][j];
    }
    int res = CollectRelics(i, j);
    mp[i][j] = res;
    mp[j][i] = res;
    // cerr << "ask " << i << ' ' << j << " = " << res << endl;
    return res;
}
int FindBase(int N)
{
    vi bucket, lis;
	FOR(i, 0, N)
	{
		if (!lis.empty() && ask(lis.back(), i) != -1)
		{
			bucket.PB(i);
			continue;
		}
		else
		{
			lis.PB(i);
			if (!bucket.empty())
			{
				lis.PB(bucket.back());
				bucket.pop_back();
			}
		}
	}
    int cand = lis.back(); bucket.PB(cand);
    // for (int x : lis)
    // {
    //     cerr << x << ' ';
    // }
    // cerr << endl;
    // cerr << "cand = " << bucket.back() << endl;
    int maj = cand, num = 1;
	while(!bucket.empty() && !lis.empty())
	{
		int x = cand, T = bucket.back();
        int n = ask(x, T);
        if (n == -1)
        {
            lis.pop_back();
            bucket.pop_back();
        }
        else
        {
            lis.pop_back();
            if (!lis.empty()) lis.pop_back();
            if (n == maj)
            {
                num++;
            }
            else
            {
                num--;
                if (num == -1)
                {
                    num = 1;
                    maj = n;
                }
            }
        }
	}
    // cerr << "cand = " << cand << " maj = " << maj << endl;
    return (bucket.empty() ? -1 : maj);
}
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 640 KB Wrong
2 Incorrect 5 ms 640 KB Wrong
3 Incorrect 5 ms 384 KB Wrong
4 Incorrect 5 ms 640 KB Wrong
5 Incorrect 5 ms 688 KB Wrong
6 Incorrect 5 ms 640 KB Wrong
7 Incorrect 5 ms 640 KB Wrong
8 Incorrect 5 ms 640 KB Wrong
9 Incorrect 5 ms 640 KB Wrong
10 Incorrect 5 ms 640 KB Wrong
11 Incorrect 5 ms 640 KB Wrong
12 Incorrect 5 ms 640 KB Wrong
13 Incorrect 5 ms 640 KB Wrong
14 Incorrect 5 ms 640 KB Wrong
15 Incorrect 5 ms 640 KB Wrong
16 Incorrect 5 ms 640 KB Wrong
17 Correct 4 ms 512 KB Correct : C = 0
18 Incorrect 5 ms 640 KB Wrong
19 Incorrect 5 ms 640 KB Wrong
20 Incorrect 5 ms 640 KB Wrong
21 Incorrect 5 ms 640 KB Wrong
22 Incorrect 5 ms 640 KB Wrong
23 Incorrect 5 ms 640 KB Wrong
24 Incorrect 5 ms 640 KB Wrong
25 Incorrect 6 ms 640 KB Wrong
26 Incorrect 5 ms 640 KB Wrong
27 Incorrect 5 ms 640 KB Wrong