이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "cave.h"
#define DIM 5010
using namespace std;
int n,i,j,ans;
int v[DIM],sol[DIM],f[DIM],w[DIM];
/*void answer(int s[], int d[]){
for (int i=0;i<n;i++)
cout<<s[i]<<" ";
cout<<"\n";
for (int i=0;i<n;i++)
cout<<d[i]<<"\n";
}
int tryCombination (int S[]){
int ans,i;
for (i=0;i<n;i++)
cout<<S[i]<<" ";
cout<<endl;
cin>>ans;
cout<<endl;
return ans;
}
*/
int verif (int x, int y){
for (int i=0;i<n;i++){
if (f[i]){
w[i] = v[i];
continue;
}
if (i >= x && i <= y)
w[i] = 1;
else w[i] = 0;
}
return tryCombination(w);
}
void exploreCave (int N){
n = N;
int ok = 0;
for (i=0;i<n;i++){
int ans = tryCombination(v);
if (ans == i){
int st = 0, dr = n-1;
while (st < dr){
int mid = (st+dr)>>1;
int ans = verif(st,mid);
if (ans == -1){
ok = 1;
for (j=0;j<n;j++)
v[j] = w[j];
break;
}
if (ans > i)
dr = mid;
else st = mid+1;
}
if (ok)
break;
/// st
sol[st] = i;
f[st] = 1;
v[st] = 1;
} else {
/// usa i e deschisa, trb sa i gasesc perechea
int st = 0, dr = n-1;
while (st < dr){
int mid = (st+dr)>>1;
int ans = verif(st,mid);
if (ans == -1){
ok = 1;
for (j=0;j<n;j++)
v[j] = w[j];
break;
}
if (ans > i)
dr = mid;
else st = mid+1;
}
if (ok)
break;
sol[st] = i;
f[st] = 1;
v[st] = 0;
}
}
for (i=0;i<n;i++){
if (f[i])
continue;
if (v[i] == 0){
v[i] = 1;
sol[i] = tryCombination(v);
v[i] = 0;
} else {
v[i] = 0;
sol[i] = tryCombination(v);
v[i] = 1;
}
}
answer(v,sol);
}
# | 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... |