Submission #197809

#TimeUsernameProblemLanguageResultExecution timeMemory
197809SamAndLinear Garden (IOI08_linear_garden)C++17
100 / 100
468 ms2424 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1000006, m = 5; int M; int n; char a[N]; int dp[m][m][m]; int ndp[m][m][m]; int main() { #ifdef SOMETHING freopen("input.txt", "r", stdin); #endif // SOMETHING scanf("%d%d", &n, &M); scanf(" %s", a); int minu = 2, maxu = 2, p = 2; for (int i = 0; i < n; ++i) { memset(ndp, 0, sizeof ndp); for (int minu = 0; minu < m; ++minu) { for (int maxu = minu; maxu < m; ++maxu) { for (int p = minu; p <= maxu; ++p) { int yp = p + 1; if (abs(yp - minu) > 2 || abs(yp - maxu) > 2) continue; int yminu = min(yp, minu); int ymaxu = max(yp, maxu); ndp[yminu][ymaxu][yp] = (ndp[yminu][ymaxu][yp] + dp[minu][maxu][p]) % M; } for (int p = minu; p <= maxu; ++p) { int yp = p - 1; if (abs(yp - minu) > 2 || abs(yp - maxu) > 2) continue; int yminu = min(yp, minu); int ymaxu = max(yp, maxu); ndp[yminu][ymaxu][yp] = (ndp[yminu][ymaxu][yp] + dp[minu][maxu][p]) % M; } } } if (a[i] == 'P') { int yp = p - 1; if (!(abs(yp - minu) > 2 || abs(yp - maxu) > 2)) { int yminu = min(yp, minu); int ymaxu = max(yp, maxu); ndp[yminu][ymaxu][yp] = (ndp[yminu][ymaxu][yp] + 1) % M; } } if (a[i] == 'P') ++p; else --p; minu = min(minu, p); maxu = max(maxu, p); memcpy(dp, ndp, sizeof ndp); } int ans = 0; for (int minu = 0; minu < m; ++minu) { for (int maxu = minu; maxu < m; ++maxu) { for (int p = minu; p <= maxu; ++p) { ans = (ans + dp[minu][maxu][p]) % M; } } } ans = (ans + 1) % M; printf("%d\n", ans); return 0; }

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:17:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &n, &M);
     ~~~~~^~~~~~~~~~~~~~~~
linear_garden.cpp:18:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf(" %s", a);
     ~~~~~^~~~~~~~~~
#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...