Submission #263603

# Submission time Handle Problem Language Result Execution time Memory
263603 2020-08-13T20:34:27 Z Sorting Board (CEOI13_board) C++17
100 / 100
5 ms 928 KB
#include <bits/stdc++.h>

using namespace std;

string a, b;

string get_path(const string &s){
    vector<int> v;
    int curr = -1;
    int n = s.size();

    for(int i = 0; i < n; ++i){
        if(s[i] == '1' || s[i] == '2'){
            if(curr != (s[i] - '0')) v.push_back(1);
            else v.back()++;
            curr = (s[i] - '0');
        }
        else if(s[i] == 'U'){
            v.back()--;
            if(v.back() == 0){
                if(v.size() == 1){
                    v.pop_back();
                    curr = -1;
                }
                else{
                    v.pop_back();
                    curr = 3 - curr;
                }
            }
        }
        else if(s[i] == 'L' || s[i] == 'R'){
            int num = (s[i] == 'L') ? 2 : 1;    
            if(curr == num){
                v.back()--;
                if(v.back() == 0){
                    v.pop_back();
                    if(v.empty()) v.push_back(1);
                    else v.back()++;
                }
                else v.push_back(1);

                curr = 3 - curr;
            }
            else{
                int x = v.back();
                v.pop_back();

                v.back()--;
                if(v.back() == 0){
                    v.pop_back();
                    if(v.empty()) v.push_back(1);
                    else v.back()++;
                }
                else v.push_back(1);

                v.push_back(x);

                curr = 3 - curr;
            }
        }
    }

    string ans = "";
    for(int i = (int)v.size() - 1; i >= 0; --i){
        for(int j = 0; j < v[i]; ++j)
            ans += curr + '0';
        curr = 3 - curr;
    }

    reverse(ans.begin(), ans.end());
    return ans;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> a >> b;

    a = get_path(a);
    b = get_path(b);

    int x = a.size() + b.size();
    int dist = 0, ans = x;
    bool ok = false;
    for(int i = 0; i < min(a.size(), b.size()); ++i){
        if(a[i] != b[i] && !ok){
            ok = true;
            if(a[i] == '2')
                swap(a, b);
        }

        dist = 2 * dist - 1;
        if(a[i] == '1') dist++;
        if(b[i] == '2') dist++;

        if(dist > 3) break;
        ans = min(ans, dist + x - 2 * (i + 1));
    }

    cout << ans << "\n";
}

Compilation message

board.cpp: In function 'int main()':
board.cpp:86:22: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
   86 |     for(int i = 0; i < min(a.size(), b.size()); ++i){
      |                    ~~^~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 3 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 5 ms 640 KB Output is correct
3 Correct 2 ms 512 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 4 ms 640 KB Output is correct
3 Correct 3 ms 640 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 0 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 768 KB Output is correct
2 Correct 3 ms 896 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 768 KB Output is correct
2 Correct 3 ms 896 KB Output is correct
3 Correct 1 ms 400 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 3 ms 896 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 640 KB Output is correct
2 Correct 4 ms 928 KB Output is correct
3 Correct 2 ms 768 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 4 ms 896 KB Output is correct