# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
233766 | dCoding | Cave (IOI13_cave) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
//#include "cave.h"
#define ll long long int
#define ld long double
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define pll pair<ll,ll>
#define F first
#define S second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define MS(x,a) memset((x),(a),sizeof(x))
#define F0R(i,n) for(auto (i) = 0; (i) < (n); (i)++)
#define FOR(i,a,b) for(auto (i) = (a); (i) <= (b); (i)++)
#define ROF(i,a,b) for(auto (i) = (a); (i) >= (b); (i)--)
using namespace std;
/*
int tryCombination(int s[]) {
cout << "combo: ";
F0R(i,4) cout << s[i] << " ";
cout << endl;
int x; cin >> x;
return x;
}
void answer(int s[],int d[]) {
cout << "s = "; F0R(i,4) cout << s[i] << " "; cout << endl;
cout << "d = "; F0R(i,4) cout << d[i] << " "; cout << endl;
}
*/
void exploreCave(int n) {
int s[n] = {},d[n] = {};
int sw[n] = {},fixed[n] = {};
set<pii> notdone;
F0R(i,n)notdone.insert(mp(0,i));
int cur = tryCombination(s);
int hh = 0;
while(cur != -1 && !notdone.empty()) {
int ele = notdone.begin()->S;
int lower = notdone.begin()->F;
notdone.erase(notdone.begin());
s[ele] ^= 1;
int now = tryCombination(s);
if(now == -1) {
fixed[ele] = true;
sw[ele] = s[ele];
d[ele] = cur;
cur = -1;
break;
} else if(now == cur) {
notdone.insert(mp(hh+1,ele));
++hh;
} else {
fixed[ele] = true;
s[ele] ^= 1;
sw[ele] = s[ele];
d[ele] = now;
}
}
F0R(i,n) {
if(!fixed[i]) {
s[i] ^= 1;
int now = tryCombination(s);
s[i] ^= 1;
sw[i] = s[i];
d[i] = now;
fixed[i] = true;
}
}
answer(sw,d);
}
/*
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
exploreCave(4);
}
*/