Submission #173654

#TimeUsernameProblemLanguageResultExecution timeMemory
173654lckcodeCave (IOI13_cave)C++14
100 / 100
1503 ms604 KiB
#include "cave.h"
#include<bits/stdc++.h>
using namespace std;
bool done[5005];
int comb[5005];
int ans[5005], d[5005];
void exploreCave(int N) {
    int n = N;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) comb[j] = ans[j];
        for (int j = 0; j < n; ++j)
            if(!done[j]) comb[j] = 0;
        // for (int j = 0; j < n; ++j) cout << comb[j] << ' ';
        // cout << endl;
        int x = tryCombination(comb), st = 0;
        if (x == i) st = 1;
        int yo = n - i;
        int l = 1, r = yo;
        int res = 0;
        while (l <= r) {
            int m = (l + r) / 2;
            int cnt = 0;
            for (int j = 0; j < n; ++j) {
                if(done[j]) comb[j] = ans[j];
                else comb[j] = 1 -  st;
            }
            for (int j = 0; j < n && cnt < m; ++j)
                if (!done[j]) comb[j] = st, cnt++;
            if (tryCombination(comb) == i) l = m + 1;
            else r = m - 1, res = m;
        }
        // cout << x << " " << st << " " << res << endl;
        int cnt = 0;
        for (int j = 0; j < n && cnt < res; ++j) {
            if(!done[j]) {
                cnt++;
                if (cnt == res) {
                    // cout << j << endl;
                    ans[j] = st;
                    done[j] = 1;
                    d[j] = i;
                    break;
                }
            }
        }
    }
    answer(ans, 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...