답안 #257065

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
257065 2020-08-03T15:11:49 Z doowey 게임판 (CEOI13_board) C++14
70 / 100
200 ms 1512 KB
#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<int> res = {1};
    for(char x : t){
        if(x == '1') res.push_back(0);
        else if(x == '2') res.push_back(1);
        else if(x == 'U'){
            res.pop_back();
        }
        else if(x == 'L'){
            int id = res.size() - 1;
            while(id >= 0){
                if(res[id] == 0){
                    res[id] ^= 1;
                }
                else{
                    res[id] ^= 1;
                    break;
                }
                id -- ;
            }
        }
        else{
            int id = res.size() - 1;
            while(id >= 0){
                if(res[id] == 0){
                    res[id] ^= 1;
                    break;
                }
                else{
                    res[id] ^= 1;
                }
                id -- ;
            }
        }
    }
    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), 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

board.cpp: In function 'int main()':
board.cpp:64:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int com = 0; com < min(p.size(), q.size()); com ++ ){
                      ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 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
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 768 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 2 ms 640 KB Output is correct
# 결과 실행 시간 메모리 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
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB Output is correct
2 Correct 3 ms 896 KB Output is correct
3 Correct 2 ms 640 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 0 ms 384 KB Output is correct
# 결과 실행 시간 메모리 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
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB Output is correct
2 Correct 3 ms 768 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
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1094 ms 1296 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1088 ms 1296 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1078 ms 1512 KB Time limit exceeded
2 Halted 0 ms 0 KB -