Submission #677390

#TimeUsernameProblemLanguageResultExecution timeMemory
677390Cross_Ratio기억 압축 (JOI15_memory)C++14
0 / 100
1 ms212 KiB
#include "Memory_lib.h" #include <bits/stdc++.h> using namespace std; int pw[25]; int val(int s, int e, int M) { int val = 0, cnt = 1; for(int i=s;i<e;i++) { val += (M & pw[i])/pw[i] * cnt; cnt *= 2; } return val; } /*string s; char Get(int v) { cout << v << ' '; assert(1<=v&&v<=s.length()); return s[v-1]; }*/ int Memory(int N, int M) { int i; pw[0] = 1; for(i=1;i<=23;i++) pw[i] = pw[i-1] * 2; int st = val(0, 7, M); int pt = val(7, 14, M); int cnt = val(14, 21, M); int k = val(21, 22, M); //cout << st << ' ' << pt << ' ' << cnt << ' ' << k << '\n'; if(st==pt) { //assert(1<=st+1&&st+1<=N); char c = Get(st+1); if(c=='<' || c=='[') { if(st+1==N) return -2; int v = st + pw[7] * (st+1) + pw[14] * 1 + pw[21] * (c=='<'?1:0); return v; } else { if(st-1<0) return -2; int v = st + pw[7] * (st - 1) + pw[14] * 1 + pw[21] * (c=='>'?1:0); return v; } } char c = Get(pt+1); assert(1<=pt+1); if(c=='<'||c=='[') { if(st < pt) { if(pt+1==N) return -2; int v = st + pw[7] * (pt + 1) + pw[14] * (cnt + 1) + pw[21] * k; return v; } else { // pt < st case if(cnt==1) { int k2 = (c=='<'?1:0); if(k==k2) { if(st+1==N) return -1; int v = st+1 + pw[7] * (st+1) + pw[14] * 0 + pw[21] * 0; return v; } else return -2; } else { if(pt-1<0) return -2; int v = st + pw[7] * (pt - 1) + pw[14] * (cnt - 1) + pw[21] *k; return v; } } } else { // c == '>' || c == ']' if(st<pt) { if(cnt==1) { int k2 = (c=='>'?1:0); if(k==k2) { if(st+1==N) return -1; int v = st+1 + pw[7] * (st+1) + pw[14] * 0 + pw[21] * 0; return v; } else return -2; } else { if(pt+1==N) return -2; int v = st + pw[7] * (pt+1) + pw[14] * (cnt-1) + pw[21] * k; return v; } } else { // pt < st if(pt-1<0) return -2; int v = st + pw[7] * (pt-1) + pw[14] * (cnt+1) + pw[21] * k; return v; } } } /* signed main() { cin >> s; int cnt = 15000; int M = 0; while(cnt--) { M = Memory(s.length(), M); cout << M << '\n'; if(M==-1) cout << "Right\n"; else if(M==-2) cout << "Wrong\n"; if(M==-1||M==-2) break; } } */
#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...