Submission #595945

#TimeUsernameProblemLanguageResultExecution timeMemory
595945jamezzz기억 압축 (JOI15_memory)C++17
100 / 100
4215 ms284092 KiB
#include "Memory_lib.h" #include <bits/stdc++.h> using namespace std; int Memory(int N,int M){ int cur=M&127; if(cur>N)return -2; if(cur==N){ int mode=(M>>21); if(mode==0)return N+(1<<21); int pos=(M>>7)&127; if(pos>N)return -2; int sum=(M>>14)&127; if(sum>N)return -2; 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; return (cur+1)+((cur+1)<<7); } else{ int cur=M&127;//current pos int pos=(M>>7)&127;//top of stack? if(pos>=N)return -2; int sum=(M>>14)&127;//prefix sum if(sum>N)return -2; 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); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...