답안 #595925

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
595925 2022-07-14T08:06:36 Z jamezzz 기억 압축 (JOI15_memory) C++17
0 / 100
0 ms 212 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;
		int sum=(M>>14)&127;
		printf("%d %d\n",pos,sum);
		if(pos==N){
			if(sum==0)return -1;
			else return -2;
		}
		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;
		assert(cur+1<=N);
		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
		//if(pos>N)assert(false);//why???
		char 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 Incorrect 0 ms 212 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -