Submission #257117

#TimeUsernameProblemLanguageResultExecution timeMemory
257117dooweyBoard (CEOI13_board)C++14
100 / 100
4 ms1420 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); vector<int> gen(string t){ vector<pii> cc = {mp(1,1)}; // {len, bit} for(char x : t){ if(x == '1') { if(cc.back().se == 0) cc.back().fi ++ ; else cc.push_back(mp(1, 0)); } else if(x == '2') { if(cc.back().se == 1) cc.back().fi ++ ; else cc.push_back(mp(1, 1)); } else if(x == 'U'){ cc.back().fi -- ; if(cc.back().fi == 0) cc.pop_back(); } else if(x == 'L'){ int las; if(cc.back().se == 0){ las = cc.back().fi; cc.pop_back(); if(cc.back().fi == 1){ cc.pop_back(); cc.back().fi ++ ; } else{ cc.back().fi -- ; cc.push_back(mp(1, 0)); } cc.push_back(mp(las, 1)); } else{ if(cc.back().fi == 1){ cc.pop_back(); cc.back().fi ++ ; } else{ cc.back().fi -- ; cc.push_back(mp(1, 0)); } } } else{ int las; if(cc.back().se == 1){ las = cc.back().fi; cc.pop_back(); if(cc.back().fi == 1){ cc.pop_back(); cc.back().fi ++ ; } else{ cc.back().fi -- ; cc.push_back(mp(1, 1)); } cc.push_back(mp(las, 0)); } else{ if(cc.back().fi == 1){ cc.pop_back(); cc.back().fi ++ ; } else{ cc.back().fi -- ; cc.push_back(mp(1, 1)); } } } } vector<int> res; for(auto x : cc){ for(int y = 0; y < x.fi; y ++ ){ res.push_back(x.se); } } return res; } const ll MX = (int)1e9 + 7; const int N = (int)2e5 + 10; int main(){ fastIO; string a, b; cin >> a >> b; vector<int> p = gen(a); vector<int> q = gen(b); if(p.size() > q.size()) swap(p,q); ll low = (int)p.size() - 1 + (int)q.size() - 1; ll dif = 0; int side = -1; for(int com = 0; com < min(p.size(), q.size()); com ++ ){ dif *= 2ll; if(dif >= MX) break; if(p[com] != q[com]){ if(side == -1){ if(p[com] == 1) side = 0; else side = 1; } if(p[com] == 1){ if(side == 0) dif ++ ; else dif -- ; } else{ if(side == 1) dif ++ ; else dif -- ; } } low = min(low, dif + (ll)p.size() - (com + 1) + (ll)q.size() - (com + 1)); } cout << low << "\n"; return 0; }

Compilation message (stderr)

board.cpp: In function 'int main()':
board.cpp:107:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int com = 0; com < min(p.size(), q.size()); com ++ ){
                      ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...