Submission #1243673

#TimeUsernameProblemLanguageResultExecution timeMemory
1243673Bui_Quoc_CuongGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
75 / 100
1123 ms780428 KiB
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define ALL(A) A.begin(), A.end()
#define FOR(i, a, b) for(int i = a; i <= (int)b; i++)
#define FORD(i, a, b) for(int i = a; i >= (int)b; i--)
#define taskname "kieuoanh"
const int N = 5e5 + 5;

int n;
string s;
int dp[405][405][405][3];
vector <int> preR, preG, preY;

int calc(int l, int r, vector <int> v){
	int cnt = 0;
	for(int i = l; i < (int)v.size() && v[i] <= r; i++) cnt++;
	return cnt;
}

void Solve(){
	cin >> n >> s; s = "*" + s;
	FOR(i, 1, n){
		if(s[i] == 'R') preR.push_back(i);
		if(s[i] == 'G') preG.push_back(i);
		if(s[i] == 'Y') preY.push_back(i);
	}
	memset(dp, 0x3f, sizeof dp);
	int n = preR.size(), m = preG.size(), p = preY.size();
	dp[0][0][0][0] = dp[0][0][0][1] = dp[0][0][0][2] = 0;
	FOR(i, 0, n){
		FOR(j, 0, m) FOR(k, 0, p){
			FOR(l, 0, 2){
				int &cur = dp[i][j][k][l];
				if(l != 0 && i + 1 <= n){
					dp[i + 1][j][k][0] = min(dp[i + 1][j][k][0], cur + calc(j, preR[i], preG) + calc(k, preR[i], preY));
				}
				if(l != 1 && j + 1 <= m){
					dp[i][j + 1][k][1] = min(dp[i][j + 1][k][1], cur + calc(i, preG[j], preR) + calc(k, preG[j], preY));
				}
				if(l != 2 && k + 1 <= p){
					dp[i][j][k + 1][2] = min(dp[i][j][k + 1][2], cur + calc(i, preY[k], preR) + calc(j, preY[k], preG));
				}
			}
		}
	}	
	int ans = 2e9;
	FOR(l, 0, 2){
		ans = min(ans, dp[n][m][p][l]);
	}
	cout << (ans >= 1e9 ? - 1 : ans);
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    if(fopen(taskname".inp", "r")){
        freopen(taskname".inp", "r", stdin); 
        freopen(taskname".out", "w", stdout);
    }
    Solve();
    return 0;
}

Compilation message (stderr)

joi2019_ho_t3.cpp: In function 'int main()':
joi2019_ho_t3.cpp:58:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |         freopen(taskname".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
joi2019_ho_t3.cpp:59:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |         freopen(taskname".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...