Submission #768846

#TimeUsernameProblemLanguageResultExecution timeMemory
768846LudisseyCave (IOI13_cave)C++14
100 / 100
340 ms424 KiB
#include "cave.h"
#include <iostream>
#include <string>
#include <set>
#include <map>
#include <cstring>
#include <unordered_map>
#include <vector>
#include <fstream>
#include <bitset>
#include <tuple>
#include <cmath>
#include <cstdint>
#include <stack>
#include <cassert>
#include <cstdio>
#include <queue>
#include <iterator>
#include <iomanip>
#include <algorithm>
#include <sstream>

using namespace std;


int S[100000] = {0};
int S0[100000] = { 0 };
int S1[100000] = { 0 };

int D[100000] = { 0 };

void exploreCave(int N) {
    int crack = 0;
    for (int i = 0; i < N; i++)
    {
        S[i] = 1;
        D[i] = 0;
    }
    /* while (crack < N) {
        S[crack] = 1 - S[crack];
        crack = tryCombination(S);
        if (crack == -1) break;
    }*/
    vector<bool> visited(N);
    while (crack < N) {
        int l=0, r=N-1;
        int comb = 0;
        for (int i = l; i <= r; i++)
        {
            if (!visited[i]) {
                S[i] = 0;
            }
        }
        int res = tryCombination(S);
        if (res == crack) {
            comb = 1;
            for (int i = l; i <= r; i++)
            {
                if (!visited[i]) {
                    S[i] = 1;
                }
            }
        }
        while (l < r) {
            int mid = (l + r) / 2;
            for (int i = l; i <= r; i++)
            {
                if (!visited[i]) {
                    if (i>mid) {
                       S[i] = 1-comb;
                    }
                    else {
                        S[i] = comb;
                    }
                }
            }
            res = tryCombination(S);
            if (res > crack || res == -1) {
                r = mid;
            }
            else {
                for (int i = l; i <= mid; i++)
                {
                    if (!visited[i]) S[i] = 1-comb;
                }
                l = mid+1;
            }
        }
        S[l] = comb;
        visited[l] = true;
        D[l] = crack;
        crack++;
    }
    answer(S, D);
}
#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...