제출 #522590

#제출 시각아이디문제언어결과실행 시간메모리
522590Leo121Linear Garden (IOI08_linear_garden)C++14
100 / 100
95 ms9116 KiB
#include <bits/stdc++.h> #define forn(i, a, b) for(int i = int(a); i <= int(b); ++ i) #define fora(i, a, b) for(int i = int(a); i >= int(b); -- i) using namespace std; typedef long long ll; const ll mod = 1e9 + 7; const int lim = 1e6; int dp[2][5][5]; int pfmin[lim + 2]; int pfmax[lim + 2]; char cadena[lim + 2]; int m, n; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m; forn(i, 1, n){ cin >> cadena[i]; } pfmin[0] = 2; pfmax[0] = 1; pfmax[1] = (cadena[1] == 'P') ? 3 : 1; pfmin[1] = pfmax[1]; int numero, suma; ///cout << "1 : " << pfmin[1] << " " << pfmax[1] << "\n"; forn(i, 2, n - 1){ suma = (cadena[i] == 'P') ? 1 : -1; numero = (cadena[i] == 'P') ? 3 : 1; pfmax[i] = max(pfmax[i - 1] + suma, numero); pfmin[i] = min(pfmin[i - 1] + suma, numero); ///cout << i << " : " << pfmin[i] << " " << pfmax[i] << "\n"; } forn(i, 0, 4){ forn(j, i, 4){ dp[n % 2][i][j] = 1; dp[n % 2][i][j] %= m; } } int res = 1; res %= m; if(cadena[n] == 'P' && min(pfmin[n - 1] - 1, 1) >= 0){ res += dp[n % 2][min(pfmin[n - 1] - 1, 1)][max(pfmax[n - 1] - 1, 1)]; res %= m; } fora(i, n - 1, 1){ forn(j, 0, 4){ forn(k, j, 4){ ///aniadir P dp[i % 2][j][k] = (max(k + 1, 3) > 4) ? 0 : dp[(i - 1) % 2][min(j + 1, 3)][max(k + 1, 3)]; ///aniadir L if(min(j - 1, 1) >= 0) dp[i % 2][j][k] += dp[(i - 1) % 2][min(j - 1, 1)][max(k - 1, 1)]; dp[i % 2][j][k] %= m; } } if(cadena[i] == 'P' && min(pfmin[i - 1] - 1, 1) >= 0){ res += dp[i % 2][min(pfmin[i - 1] - 1, 1)][max(pfmax[i - 1] - 1, 1)]; res %= m; } } cout << res; 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...