Submission #1295499

#TimeUsernameProblemLanguageResultExecution timeMemory
1295499kizuGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
100 / 100
39 ms29412 KiB
#include <bits/stdc++.h>

using namespace std ;

#define is ==
#define isnt !=
#define wnsl '\n'
#define ll int

#pragma GCC optimize("unroll-oops")
#pragma GCC optimize("O3")

void chmin (ll &a, ll b) {

    a = min (a, b) ;

}

void Solve () {

    ll n ;

    cin >> n ;

    string s ;

    cin >> s ;

    ll r = 0, g = 0, y = 0 ;

    for (auto &itr : s) {

        if (itr is 'R') r ++ ;

        else if (itr is 'G') g ++ ;

        else y ++ ;

    }

    vector <ll> rc, gc, yc ;

    for (int i = 0 ; i < n ; i ++) {

        if (s [i] is 'R') rc.push_back (i) ;

        else if (s [i] is 'G') gc.push_back (i) ;

        else yc.push_back (i) ;

    }

    ll mx = n ;

    ll dpr [r + 1][mx + 1], dpg [g + 1][mx + 1], dpy [y + 1][mx + 1] ;

    for (int i = 0 ; i <= r ; i ++) {
        
        for (int j = 0 ; j <= mx ; j ++) {
            
            ll ct = 0 ;

            for (int k = 0 ; k < i ; k ++) ct += j < rc [k] ;

            dpr [i][j] = ct ;

        }

    }
    
    for (int i = 0 ; i <= g ; i ++) {
        
        for (int j = 0 ; j <= mx ; j ++) {
            
            ll ct = 0 ;

            for (int k = 0 ; k < i ; k ++) ct += j < gc [k] ;

            dpg [i][j] = ct ;

        }

    }

    for (int i = 0 ; i <= y ; i ++) {
        
        for (int j = 0 ; j <= mx ; j ++) {
            
            ll ct = 0 ;

            for (int k = 0 ; k < i ; k ++) ct += j < yc [k] ;

            dpy [i][j] = ct ;

        }

    }
    
    ll dp [r + 1][g + 1][y + 1][3] ;

    memset (dp, 0x3f3f3f3f, sizeof dp) ;

    for (int i = 0 ; i < 3 ; i ++) dp [0][0][0][i] = 0 ;
    
    for (int ir = 0 ; ir <= r ; ir ++) for (int ig = 0 ; ig <= g ; ig ++) for (int iy = 0 ; iy <= y ; iy ++) for (int k = 0 ; k < 3 ; k ++) {

        ll &s = dp [ir][ig][iy][k] ;

        if (k and ir < r) {
            
            ll pen = dpr [ir][rc [ir]] + dpg [ig][rc [ir]] + dpy [iy][rc [ir]] ;

            chmin (dp [ir + 1][ig][iy][0], s + pen) ;

        }   

        if (k isnt 1 and ig < g) {
            
            ll pen = dpr [ir][gc [ig]] + dpg [ig][gc [ig]] + dpy [iy][gc [ig]] ;

            chmin (dp [ir][ig + 1][iy][1], s + pen) ;

        }   

        if (k isnt 2 and iy < y) {
            
            ll pen = dpr [ir][yc [iy]] + dpg [ig][yc [iy]] + dpy [iy][yc [iy]] ; 
    
            chmin (dp [ir][ig][iy + 1][2], s + pen) ;

        }
        
    }

    ll mn = *min_element (dp [r][g][y], dp [r][g][y] + 3) ;

    cout << (mn > n * n * 10 ? -1 : mn) << wnsl ;

}

int main () {

    ios_base::sync_with_stdio (false) ; cin.tie (nullptr) ; cout.tie (nullptr) ;

    Solve () ;

}

Compilation message (stderr)

joi2019_ho_t3.cpp:10:35: warning: bad option '-funroll-oops' to pragma 'optimize' [-Wpragmas]
   10 | #pragma GCC optimize("unroll-oops")
      |                                   ^
joi2019_ho_t3.cpp:13:24: warning: bad option '-funroll-oops' to attribute 'optimize' [-Wattributes]
   13 | void chmin (ll &a, ll b) {
      |                        ^
joi2019_ho_t3.cpp:19:13: warning: bad option '-funroll-oops' to attribute 'optimize' [-Wattributes]
   19 | void Solve () {
      |             ^
joi2019_ho_t3.cpp:141:11: warning: bad option '-funroll-oops' to attribute 'optimize' [-Wattributes]
  141 | int main () {
      |           ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...