Submission #533699

#TimeUsernameProblemLanguageResultExecution timeMemory
533699alvingogoGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++14
100 / 100
185 ms134800 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define AquA cin.tie(0);ios_base::sync_with_stdio(0); #define fs first #define sc second #define cd complex<double> #define p_q priority_queue #define vi vector<int> #define vvi vector<vi> #define vvvi vector<vvi> #define vvvvi vector<vvvi> using namespace std; const int inf=1e9+7; int main(){ AquA; int n; cin >> n; string s; cin >> s; int cr=0,cb=0,cg=0; vi rr,bb,gg,tg(n+1),tb(n+1),tr(n+1); rr.push_back(-1); bb.push_back(-1); gg.push_back(-1); for(int i=0;i<n;i++){ tr[i]=tr[(i-1)*(i>0)]; tb[i]=tb[(i-1)*(i>0)]; tg[i]=tg[(i-1)*(i>0)]; if(s[i]=='R'){ tr[i]++; cr++; rr.push_back(i); } else if(s[i]=='Y'){ tb[i]++; cb++; bb.push_back(i); } else{ tg[i]++; cg++; gg.push_back(i); } } vvvvi dp(cr+1,vvvi(cb+1,vvi(cg+1,vi(3,inf)))); dp[0][0][0][0]=dp[0][0][0][1]=dp[0][0][0][2]=0; for(int r=0;r<=cr;r++){ for(int b=0;b<=cb;b++){ for(int g=0;g<=cg;g++){ if(r>0){ int c=max(0,tg[rr[r]]-g)+max(0,tb[rr[r]]-b); dp[r][b][g][0]=min(dp[r][b][g][0],min(dp[r-1][b][g][1],dp[r-1][b][g][2])+c); } if(b>0){ int c=max(0,tg[bb[b]]-g)+max(0,tr[bb[b]]-r); dp[r][b][g][1]=min(dp[r][b][g][1],min(dp[r][b-1][g][0],dp[r][b-1][g][2])+c); } if(g>0){ int c=max(0,tb[gg[g]]-b)+max(0,tr[gg[g]]-r); dp[r][b][g][2]=min(dp[r][b][g][2],min(dp[r][b][g-1][0],dp[r][b][g-1][1])+c); } //cout << r << " " << b << " " << g << " " << dp[r][b][g][0] << " " << dp[r][b][g][1] << " " << dp[r][b][g][2] << "\n"; } } } int h=min(dp[cr][cb][cg][0],min(dp[cr][cb][cg][1],dp[cr][cb][cg][2])); if(h==inf){ cout << -1 << "\n"; } else{ cout << h << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...