제출 #260959

#제출 시각아이디문제언어결과실행 시간메모리
260959SamAnd동굴 (IOI13_cave)C++17
100 / 100
1631 ms884 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;
#define m_p make_pair
#define fi first
#define se second
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
const int N = 5003;

int n;
bool c[N];
int b[N], u[N];

int h[N];

int ans1[N], ans2[N];

void exploreCave(int n)
{
    ::n = n;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < i; ++j)
        {
            h[u[j]] = b[j];
        }
        for (int j = 0; j < n; ++j)
        {
            if (!c[j])
                h[j] = 0;
        }
        int p = tryCombination(h);
        if (p == i)
            b[i] = 1;
        else
            b[i] = 0;
        int l = 0, r = n - 1;
        while (l <= r)
        {
            int m = (l + r) / 2;
            for (int j = 0; j < i; ++j)
            {
                h[u[j]] = b[j];
            }
            for (int j = 0; j <= m; ++j)
            {
                if (!c[j])
                {
                    h[j] = (b[i] ^ 1);
                }
            }
            for (int j = m + 1; j < n; ++j)
            {
                if (!c[j])
                {
                    h[j] = b[i];
                }
            }
            int p = tryCombination(h);
            if (p == i)
            {
                u[i] = m;
                r = m - 1;
            }
            else
                l = m + 1;
        }
        c[u[i]] = true;
    }
    for (int i = 0; i < n; ++i)
    {
        ans1[u[i]] = b[i];
        ans2[u[i]] = i;
    }
    answer(ans1, ans2);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...