제출 #1291499

#제출 시각아이디문제언어결과실행 시간메모리
1291499NValchanov건물 4 (JOI20_building4)C++20
100 / 100
612 ms28908 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>

using namespace std;

const int MAXN = 5e5 + 10;
const int INF = 1e9 + 10;

int n;
int a[2 * MAXN][2];

pair < int, int > dp[2 * MAXN][2];

void read()
{
    cin >> n;

    for(int x = 0; x < 2; x++)
    {
        for(int i = 1; i <= 2 * n; i++)
        {
            cin >> a[i][x];
        }
    }
}

void find_ans()
{
    int curcnt = n;
    int cur = -1;

    if(dp[2 * n][0].first <= curcnt && curcnt <= dp[2 * n][0].second)
    {
        cur = 0;
    }

    if(dp[2 * n][1].first <= curcnt && curcnt <= dp[2 * n][1].second)
    {
        cur = 1;
    }

    if(cur == -1)
    {
        cout << -1 << endl;
        return;
    }

    vector < int > ans;

    for(int i = 2 * n; i >= 1; i--)
    {
        ans.push_back(cur);

        curcnt -= cur;

        int prv = -1;

        for(int y = 0; y < 2; y++)
        {
            if(a[i - 1][y] <= a[i][cur] && dp[i - 1][y].first <= curcnt && curcnt <= dp[i - 1][y].second)
            {
                prv = y;
            }
        }

        assert(prv != -1);

        cur = prv;
    }

    reverse(ans.begin(), ans.end());

    for(int x : ans)
    {
        cout << (char)(x + 'A');
    }
    cout << endl;
}

void solve()
{
    dp[0][0] = dp[0][1] = {0, 0};

    for(int i = 1; i <= 2 * n; i++)
    {
        dp[i][0] = dp[i][1] = {INF, 0};

        for(int x = 0; x < 2; x++)
        {
            for(int y = 0; y < 2; y++)
            {
                if(a[i - 1][y] <= a[i][x])
                {
                    dp[i][x].first = min(dp[i][x].first, dp[i - 1][y].first + x);
                    dp[i][x].second = max(dp[i][x].second, dp[i - 1][y].second + x);
                }
            }
        }
    }
}

int main()
{
    read();
    solve();
    find_ans();

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...