답안 #595819

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
595819 2022-07-14T07:15:38 Z jamezzz 기억 압축 (JOI15_memory) C++17
0 / 100
1 ms 468 KB
#include "Memory_lib.h"
#include <bits/stdc++.h>
using namespace std;

int Memory(int N,int M){
	int cur=M&127;
	if(cur==N){
		int mode=(M>>21);
		if(mode==0)return N|(1<<21);
		int pos=(M>>7)&127;
		if(pos==N)return -1;
		int sum=(M>>14)&127;
		char c=Get(pos+1);
		if(c=='<'||c=='[')++sum;
		else --sum;
		if(sum<0)return -2;
		++pos;
		return N|(pos<<7)|(sum<<14)|(1<<21);
	}
	
	int mode=(M>>21);
	if(mode==1){//process cur element
		int cur=M&127;//current pos
		int type=(M>>7)&1;
		char c=Get(cur+1);
		if(c=='>'&&type==1)return -2;
		if(c==']'&&type==0)return -2;
		return (cur+1)|((cur+1)<<7);
	}
	else{
		int cur=M&127;//current pos
		int pos=(M>>7)&127;//top of stack?
		int sum=(M>>14)&127;//prefix sum
		assert(1<=pos+1&&pos+1<=N);
		int c=Get(pos+1);
		if(cur==pos){
			if(c=='<'||c=='[')return cur|(1<<21);
			if(cur==0)return -2;
			else return cur|((pos-1)<<7);
		}
		if(sum==0&&(c=='<'||c=='[')){
			if(c=='<'){
				return cur|(1<<21);
			}
			else{
				return cur|(1<<7)|(1<<21);
			}
		}
		if(c=='<'||c=='[')--sum;
		else ++sum;
		--pos;
		if(pos<0)return -2;
		return cur|(pos<<7)|(sum<<14);
	}
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 468 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -