이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "Memory_lib.h"
#include <bits/stdc++.h>
using namespace std;
int Memory(int N, int M) {
if (N>30){
int loc = M%(N+1);
int rem = M/(N+1);
if (loc==N) return rem==0?-1:-2;
int res = Get(loc+1);
if (res=='>'){
if (rem==0) return -2;
rem--;
}
else{
rem++;
}
if ((rem*(N+1)+loc+1)>=(1<<22)) return -2;
return rem*(N+1)+loc+1;
}
int loc = M%(N+1);
int rem = M/(N+1);
if (loc==0) rem = 1<<15;
int rems = 15-__builtin_ctz(rem);
if (rems<0) return -2;
int remm = rem>>(15-rems+1);
if (loc==N){
return rems==0?-1:-2;
}
int res = Get(loc+1);
//printf("loc %d rems = %d remm = %x\n",loc,rems,remm);
if (res==']' || res=='>'){
if (rems==0) return -2;
if ((remm&1)==(res==']')){
rems--;
remm>>=1;
}
else{
return -2;
}
}
else{
if (rems==15){
return -2;
}
rems++;
remm<<=1;
remm += (res=='[');
}
if ((((remm<<((15-rems)+1))+(1<<(15-rems)))*(N+1)+(loc+1))>=(1<<22))
return -2;
//printf("rems = %d, remm = %x\n",rems,remm);
return ((remm<<((15-rems)+1))+(1<<(15-rems)))*(N+1)+(loc+1);
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |