Submission #235590

#TimeUsernameProblemLanguageResultExecution timeMemory
235590Haunted_CppLinear Garden (IOI08_linear_garden)C++17
0 / 100
51 ms65540 KiB
/**
 *  author: Duarte Nobrega
 *  created: 28.05.2020    
**/

#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize ("Ofast")
#pragma GCC target("fma,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#pragma GCC optimize("unroll-loops")

const int N = 1e6 + 5;

int dp [N][5][5][3], n, MOD;

string w;

int add (int a, int b) {
  int res = a + b;
  if (res >= MOD) res -= MOD;
  return res;
}

int calc (int estado, char cur, char is) {
  if (estado > 0) return estado;
  if (cur < is) return 1;
  if (cur > is) return 2;
  return 0;
}

int solve (int p = 0, int maior = 2, int menor = 2, int estado = 0) {
  if (maior > 4) return 0;
  if (menor < 0) return 0;
  if (p >= n) return (estado < 2);
  int &res = dp[p][maior][menor][estado];
  if (~res) return res;
  res = 0;
  // Place a P
  res = add (res, solve (p + 1, max (maior + 1, 3), menor + 1, calc (estado, 'P', w[p])));
  // Place a L
  res = add (res, solve (p + 1, maior - 1, min (menor - 1, 1) , calc (estado, 'L', w[p])));
  return res;
}

int main () {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> MOD >> w;
  memset (dp, -1, sizeof(dp));
  cout << solve () << '\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...
#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...
#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...