답안 #704501

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
704501 2023-03-02T08:18:23 Z PenguinsAreCute Growing Vegetable is Fun 3 (JOI19_ho_t3) C++17
0 / 100
1 ms 340 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define SREP(i, a, b) for(ll i = a; i < b; i++)
#define NREP(i, a, b) for(ll i = a; i <= b; i++)
int main() {
    ll N, R = 0, Y = 0, G = 0; string S; cin >> N >> S;
    vector<ll> Rpos, Ypos, Gpos;
    SREP(i, 0, N) {
        if(S[i] == 'R') {
            Rpos.push_back(i); R++;
        } else if(S[i] == 'Y') {
            Ypos.push_back(i); Y++;
        } else {
            Gpos.push_back(i); G++;
        }
    }
    ll dp[2][Y + 1][G + 1][3];
    SREP(i, 0, 2) NREP(j, 0, Y) NREP(k, 0, G) SREP(l, 0, 3) dp[i][j][k][l] = 1e18;
    SREP(i, 0, 3) dp[0][0][0][i] = 0;
    NREP(i, 0, R) NREP(j, 0, Y) NREP(k, 0, G) {
        dp[i][j][k][0] = 1e18;
        dp[i][j][k][1] = 1e18;
        dp[i][j][k][2] = 1e18;
        if(i != 0) dp[i % 2][j][k][0] = min(dp[(i - 1) % 2][j][k][1], dp[(i - 1) % 2][j][k][2]) + abs(Rpos[i - 1] - (i + j + k - 1));
        if(j != 0) dp[i % 2][j][k][1] = min(dp[i % 2][j - 1][k][0], dp[i % 2][j - 1][k][2]) + abs(Ypos[j - 1] - (i + j + k - 1));
        if(k != 0) dp[i % 2][j][k][2] = min(dp[i % 2][j][k - 1][0], dp[i % 2][j][k - 1][1]) + abs(Gpos[k - 1] - (i + j + k - 1));
    }
    ll ans = LONG_LONG_MAX;
    SREP(i, 0, 3) ans = min(ans, dp[R % 2][Y][G][i]);
    if(ans >= 1e12) cout << -1;
    else cout << ans / 2;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 340 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -