Submission #852018

#TimeUsernameProblemLanguageResultExecution timeMemory
852018damwuanGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++17
100 / 100
248 ms774228 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define for1(i,j,k) for(int i=(j);i<=(k);i++) #define for2(i,j,k) for(int i=j;i>=k;i--) #define for3(i,j,k,l) for(int i=j;i<=k;i+=l) #define bit(n,i) ((n>>i)&1) #define all(x) x.begin(),x.end() //#pragma GCC optimize("O2,unroll-loops") //#pragma GCC target("avx,avx2,bmi,bmi2,sse,sse2,sse3,ssse3,sse4,popcnt") //#define int long long typedef long long ll; typedef pair<int,int> pii; typedef double ld; typedef pair<ld,ld> pdd; typedef pair<ll,ll> pll; const ll maxn=400+5; const ll offset=1e18; const ll block_sz=317; const ll inf=1e9; const ll mod=1e9+7; int n,a[maxn],id[maxn],dp[maxn][maxn][maxn][3],pre[maxn][3]; string s; vector<int> L1,L2,L0; int cost(int j0,int j1,int j2,int add) { if (add==0) { return max(pre[L0[j0]][1] - pre[L1[j1]][1],0) + max(pre[L0[j0]][2] - pre[L2[j2]][2],0); } else if (add==1) { return max(pre[L1[j1]][0] - pre[L0[j0]][0],0) + max(pre[L1[j1]][2] - pre[L2[j2]][2],0); } else { return max(pre[L2[j2]][0] - pre[L0[j0]][0],0) + max(pre[L2[j2]][1] - pre[L1[j1]][1],0); } } void sol() { id['R']=0; id['G']=1; id['Y']=2; cin >> n>> s; int n0=0,n1=0,n2=0; L1.pb(0); L2.pb(0); L0.pb(0); for1(i,1,n) { a[i]=id[s[i-1]]; if(a[i]==0) { n0++; L0.pb(i); } if(a[i]==1) { n1++; L1.pb(i); } if(a[i]==2) { n2++; L2.pb(i); } } for1(j,0,2) { for1(i,1,n) { pre[i][j]=pre[i-1][j]+(a[i]==j); } } for1(i,0,n) for1(j0,0,n) for1(j1,0,n) for1(k,0,2) dp[i][j0][j1][k]=inf; dp[0][0][0][0]=0; dp[0][0][0][1]=0; dp[0][0][0][2]=0; for1(i,1,n) { for1(j0,0,int(min(n0,i))) { for1(j1,0,int(min(n1,i-j0))) { int j2=i-j0-j1; if (j2>n2) continue; if (j0>0) dp[i][j0][j1][0]=min(dp[i][j0][j1][0],min(dp[i-1][j0-1][j1][1],dp[i-1][j0-1][j1][2])+cost(j0,j1,j2,0)); if (j1>0) dp[i][j0][j1][1]=min(dp[i][j0][j1][1],min(dp[i-1][j0][j1-1][2],dp[i-1][j0][j1-1][0])+cost(j0,j1,j2,1)); if (j2>0) { dp[i][j0][j1][2]=min(dp[i][j0][j1][2],min(dp[i-1][j0][j1][1],dp[i-1][j0][j1][0])+cost(j0,j1,j2,2)); // if (i==1 && j0==0 && j1==0) cerr<< "awdawd\n"; } // cerr<<i<<' ' << j0<<' '<<j1<<' '<<dp[n][n0][n1][0]<< ' '<<dp[n][n0][n1][1]<<' '<<dp[n][n0][n1][2]<<'\n'; } } } // cerr<< cost(0,0,1,2)<<" wtf\n"; int ans=min(dp[n][n0][n1][0],min(dp[n][n0][n1][1],dp[n][n0][n1][2])); if (ans>=inf) cout << "-1"; else cout << ans; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t=1;//cin >> t; while (t--) { sol(); } } /* 3 5 2 4 1 */

Compilation message (stderr)

joi2019_ho_t3.cpp: In function 'void sol()':
joi2019_ho_t3.cpp:58:23: warning: array subscript has type 'char' [-Wchar-subscripts]
   58 |         a[i]=id[s[i-1]];
      |                       ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...