Submission #1348411

#TimeUsernameProblemLanguageResultExecution timeMemory
1348411jumpMiners (IOI07_miners)C++20
100 / 100
81 ms652 KiB
#include <bits/stdc++.h>
int n;
int dp[257];
int dp2[257];
int mask(int n1,int n2,int n3,int n4){
  return n1*4*4*4+n2*4*4+n3*4+n4;
}
std::array<int,4> demask(int num){
  return {(num/(4*4*4))%4,(num/(4*4))%4,(num/(4))%4,(num)%4};
}
signed main(){
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int n;
  std::cin >> n;
  std::string str;
  std::cin >> str;
  for(int i=0;i<256;i++){
    auto dm=demask(i);
    if(dm[0]==3&&dm[1]==3&&dm[2]==3&&dm[3]==3)dp2[i]=0;//i==255 basically
    else dp2[i]=-1e9;
    dp[i]=-1e9;
  }
  for(auto ndp:str){
    int v=0;
    if(ndp=='M')v=0;
    else if(ndp=='F')v=1;
    else v=2;
    for(int i=0;i<256;i++){
      auto arr = demask(i);
      dp[mask(arr[1],v,arr[2],arr[3])]=std::max(dp[mask(arr[1],v,arr[2],arr[3])],1+dp2[i]+(int)(arr[0]!=v&&arr[0]!=3)+(int)(arr[1]!=v&&arr[1]!=3)-(int)((arr[0]==arr[1])&&arr[0]!=v&&arr[1]!=3));
      dp[mask(arr[0],arr[1],arr[3],v)]=std::max(dp[mask(arr[0],arr[1],arr[3],v)],1+dp2[i]+(int)(arr[2]!=v&&arr[2]!=3)+(int)(arr[3]!=v&&arr[3]!=3)-(int)((arr[2]==arr[3])&&arr[2]!=v&&arr[3]!=3));
    }
    for(int i=0;i<256;i++){
      if(dp[i]>=0)
      //std::cout << dp[i] << ' ';
      dp2[i]=dp[i];dp[i]=-1e9;
    }
    //std::cout << '\n';
  }
  int min = -1e9;
  for(int i=0;i<256;i++){
    min=std::max(min,dp2[i]);
  }
  std::cout << min;
}
/*
6
MBMFFB
*/
/*
16
MMBMBBBBMMMMMBMB
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...