# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
625014 | 2022-08-09T08:59:42 Z | andrei_boaca | 게임판 (CEOI13_board) | C++14 | 200 ms | 1676 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll a,b; string s; vector<ll> val,va,vb; void multiply() { ll lg=val.size(); int last=lg%2; if(last==1) val.push_back(1); else val[lg-1]++; } void divide() { ll lg=val.size(); int last=lg%2; if(val[lg-1]==1) val.pop_back(); else val[lg-1]--; } void add() { ll lg=val.size(); int last=lg%2; if(last==0) { if(val[lg-1]>1) { val[lg-1]--; val.push_back(1); } else { val.pop_back(); lg--; val[lg-1]++; } return; } else { ll nr1=val[lg-1]; ll nr0=val[lg-2]; val.pop_back(); val.pop_back(); lg-=2; if(nr0==1) { val[lg-1]++; val.push_back(nr1); } else { nr0--; val.push_back(nr0); val.push_back(1); val.push_back(nr1); } } } void subtract() { int lg=val.size(); int last=lg%2; if(last==1) { if(val[lg-1]==1) { lg--; val.pop_back(); val[lg-1]++; } else { val[lg-1]--; val.push_back(1); } return; } else { ll nr0=val[lg-1]; ll nr1=val[lg-2]; val.pop_back(); val.pop_back(); lg-=2; if(nr1==1) { val[lg-1]++; val.push_back(nr0); } else { nr1--; val.push_back(nr1); val.push_back(1); val.push_back(nr0); } } } ll getniv(ll x) { for(ll d=0;d<=62;d++) { ll st=(1LL<<d); ll dr=st*2LL-1; if(x>=st&&x<=dr) return d; } return -1; } vector<int> dif; void getdif() { dif.clear(); dif.shrink_to_fit(); int t=0; for(int i=va.size()-1;i>=0;i--) { int x=va[i]-t-vb[i]; t=0; if(x<0) { x+=2; t=1; } dif.push_back(x); } while(!dif.empty()&&dif.back()==0) dif.pop_back(); if(dif.empty()) dif.push_back(0); reverse(dif.begin(),dif.end()); } int main() { cin>>s; val.push_back(1); for(char c:s) { if(c=='1') multiply(); if(c=='2') { multiply(); add(); } if(c=='U') divide(); if(c=='L') subtract(); if(c=='R') add(); } for(int i=0;i<val.size();i++) { if(i%2==0) { for(int j=1;j<=val[i];j++) va.push_back(1); } else { for(int j=1;j<=val[i];j++) va.push_back(0); } } val.clear(); cin>>s; val.push_back(1); for(char c:s) { if(c=='1') multiply(); if(c=='2') { multiply(); add(); } if(c=='U') divide(); if(c=='L') subtract(); if(c=='R') add(); } for(int i=0;i<val.size();i++) { if(i%2==0) { for(int j=1;j<=val[i];j++) vb.push_back(1); } else { for(int j=1;j<=val[i];j++) vb.push_back(0); } } ll rez=0; ll ans=1e18; if(va.size()<vb.size()) swap(va,vb); while(va.size()>vb.size()) { rez++; va.pop_back(); } bool need=0; for(int i=0;i<va.size();i++) if(va[i]!=vb[i]) { if(va[i]<vb[i]) need=1; break; } if(need) swap(va,vb); /*for(int i:va) cout<<i; cout<<'\n'; for(int i:vb) cout<<i; cout<<'\n';*/ getdif(); while(dif.size()>20) { dif.pop_back(); va.pop_back(); vb.pop_back(); rez+=2; } while(dif.size()) { getdif(); ll x=0; for(int i:dif) x=x*2LL+i; ans=min(ans,x+rez); if(x==0) break; rez+=2; va.pop_back(); vb.pop_back(); } cout<<ans; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 0 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 468 KB | Output is correct |
2 | Correct | 1 ms | 340 KB | Output is correct |
3 | Correct | 7 ms | 468 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 340 KB | Output is correct |
2 | Correct | 7 ms | 468 KB | Output is correct |
3 | Correct | 4 ms | 468 KB | Output is correct |
4 | Correct | 0 ms | 212 KB | Output is correct |
5 | Correct | 0 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 212 KB | Output is correct |
4 | Correct | 0 ms | 212 KB | Output is correct |
5 | Correct | 0 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 340 KB | Output is correct |
2 | Correct | 1 ms | 340 KB | Output is correct |
3 | Correct | 1 ms | 212 KB | Output is correct |
4 | Correct | 0 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 340 KB | Output is correct |
2 | Correct | 6 ms | 468 KB | Output is correct |
3 | Correct | 4 ms | 468 KB | Output is correct |
4 | Correct | 1 ms | 212 KB | Output is correct |
5 | Correct | 1 ms | 212 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 1588 KB | Output is correct |
2 | Correct | 6 ms | 1588 KB | Output is correct |
3 | Correct | 101 ms | 596 KB | Output is correct |
4 | Correct | 80 ms | 504 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 1588 KB | Output is correct |
2 | Correct | 6 ms | 1548 KB | Output is correct |
3 | Correct | 36 ms | 340 KB | Output is correct |
4 | Correct | 63 ms | 592 KB | Output is correct |
5 | Correct | 6 ms | 1676 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 7 ms | 1548 KB | Output is correct |
2 | Correct | 6 ms | 1548 KB | Output is correct |
3 | Correct | 6 ms | 1560 KB | Output is correct |
4 | Execution timed out | 225 ms | 668 KB | Time limit exceeded |
5 | Halted | 0 ms | 0 KB | - |