This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma once
#include <bits/stdc++.h>
#include "cave.h"
using namespace std;
const int sz = 5000;
int ck[sz];
int idx_for[sz];
int ans[sz];
int st[sz];
int sta_for[sz];
int tryCombination(int S[]);
int tryC(const vector<int>& state, int cur_test, int switch_pos) {
for (int i = 0; i < sz; ++i) ck[i] = switch_pos^1;
for (int i = 0; i < cur_test; ++i) {
ck[idx_for[i]] = sta_for[i];
}
for (int i = 0; i < state.size(); ++i) {
ck[state[i]] = switch_pos;
}
return tryCombination(ck);
}
void answer(int S[], int D[]);
pair<int, int> solve(int idx, const vector<int>& candidates, int open_state) {
if (candidates.size() == 1) return {candidates.front(), open_state};
vector<int> left, right;
for (int i = 0; i < candidates.size()/2; ++i) {
left.push_back(candidates[i]);
}
for (int i = candidates.size()/2; i < candidates.size(); ++i) {
right.push_back(candidates[i]);
}
int v = tryC(left, idx, open_state);
if (v != idx) return solve(idx, left, open_state);
return solve(idx, right, open_state);
}
//return switch responsible for door idx and state
pair<int, int> get_ans(int idx, vector<int> candidates) {
int v = tryC(candidates, idx, 1);
int open_state = 0;
if (v != idx) open_state = 1;
return solve(idx, candidates, open_state);
}
void exploreCave(int N) {
vector<int> candidates;
for (int i = 0; i < N; ++i) {
candidates.push_back(i);
}
for (int i = 0; i < N; ++i) {
auto [idx, state] = get_ans(i, candidates);
// cerr << idx << "->" << i << "\n";
idx_for[i] = idx;
sta_for[i] = state;
ans[idx_for[i]] = i;
st[idx_for[i]] = state;
candidates.erase(find(candidates.begin(), candidates.end(), idx));
}
// for (int i = 0; i < N; ++i) {
// cout << ans[i] << " ";
// }
// cout << "\n";
// for (int i = 0; i < N; ++i) {
// cout << st[i] << " ";
// }
// cout << "\n";
answer(st, ans);
}
Compilation message (stderr)
cave.cpp:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
cave.cpp: In function 'int tryC(const std::vector<int>&, int, int)':
cave.cpp:20:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
20 | for (int i = 0; i < state.size(); ++i) {
| ~~^~~~~~~~~~~~~~
cave.cpp: In function 'std::pair<int, int> solve(int, const std::vector<int>&, int)':
cave.cpp:31:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
31 | for (int i = 0; i < candidates.size()/2; ++i) {
| ~~^~~~~~~~~~~~~~~~~~~~~
cave.cpp:34:41: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
34 | for (int i = candidates.size()/2; i < candidates.size(); ++i) {
| ~~^~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |