Submission #1160019

#TimeUsernameProblemLanguageResultExecution timeMemory
1160019fatman87878Growing Vegetable is Fun 3 (JOI19_ho_t3)C++20
100 / 100
44 ms2116 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define all(x) (x).begin(),(x).end() #define lb(x) ((x)&-(x)) #define IOS cin.tie(nullptr)->sync_with_stdio(0); constexpr int maxN = 4e2+5; int n,dp[2][maxN][maxN][3],others[3][maxN],pos[3][maxN],cnt[3]; string s; inline int cal(int v1,int v2,int v3,int nxt){ //cout<<v1<<' '<<v2<<' '<<v3<<' '<<nxt<<'\n'; int ret = 0,p = 0; if(nxt==0)p = pos[0][v1+1]; else if(nxt==1)p = pos[1][v2+1]; else if(nxt==2)p = pos[2][v3+1]; ret += max(0,others[0][p]-v1-(nxt==0)); ret += max(0,others[1][p]-v2-(nxt==1)); ret += max(0,others[2][p]-v3-(nxt==2)); return ret; } inline void chmin(int& a,int b){ a=min(a,b); } int main(){ IOS cin>>n>>s; s=' '+s; for(int i = 1;i<=n;i++){ int v = (s[i]=='R'?0:(s[i]=='G'?1:2)); for(int j = 0;j<3;j++)others[j][i]=others[j][i-1]; others[v][i]++; pos[v][++cnt[v]]=i; } for(int j = 0;j<=cnt[1];j++){ for(int k = 0;k<=cnt[2];k++){ for(int nxt = 0;nxt<3;nxt++){ dp[0][j][k][nxt] = 1e9; } } } dp[0][0][0][0] = 0; dp[0][0][0][1] = 0; dp[0][0][0][2] = 0; for(int i = 0;i<n;i++){ for(int j = 0;j<=cnt[1];j++){ for(int k = 0;k<=cnt[2];k++){ for(int nxt = 0;nxt<3;nxt++){ dp[i&1^1][j][k][nxt] = 1e9; } } } for(int j = 0;j<=cnt[1]&&j<=i;j++){ for(int k = 0;k<=cnt[2]&&j+k<=i;k++)if(i-j-k<=cnt[0]){ for(int lst = 0;lst<3;lst++){ if(lst!=0&&i-j-k<cnt[0])chmin(dp[i&1^1][j][k][0],dp[i&1][j][k][lst] + cal(i-j-k,j,k,0)); if(lst!=1&&j<cnt[1])chmin(dp[i&1^1][j+1][k][1],dp[i&1][j][k][lst] + cal(i-j-k,j,k,1)); if(lst!=2&&k<cnt[2])chmin(dp[i&1^1][j][k+1][2],dp[i&1][j][k][lst] + cal(i-j-k,j,k,2)); } } } } int ans = *min_element(dp[n&1][cnt[1]][cnt[2]],dp[n&1][cnt[1]][cnt[2]]+3); if(ans>n*n)cout<<"-1\n"; else cout<<ans<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...