Submission #441878

#TimeUsernameProblemLanguageResultExecution timeMemory
441878rainboyLinear Garden (IOI08_linear_garden)C11
100 / 100
95 ms10044 KiB
/* discussed with Dukkha on dp/dq */ #include <stdio.h> #define N 1000000 int main() { static int xx[N], yy[N], dp[3][3], dq[3][3]; static char s[N + 1]; int n, m, i, cnt, x, x_, y, y_; scanf("%d%d%s", &n, &m, s); for (i = 1; i < n; i++) { if (s[i - 1] == 'P') { xx[i] = xx[i - 1] + 1; yy[i] = yy[i - 1] - 1; } else { xx[i] = xx[i - 1] - 1; yy[i] = yy[i - 1] + 1; } if (xx[i] < 0) xx[i] = 0; if (yy[i] < 0) yy[i] = 0; } dp[0][0] = 1; cnt = 1; for (i = n - 1; i >= 0; i--) { if (s[i] == 'P') { x = xx[i] - 1; y = yy[i] + 1; if (x < 0) x = 0; for (x_ = 0; x + x_ < 3; x_++) for (y_ = 0; y + y_ < 3; y_++) cnt = (cnt + dp[x_][y_]) % m; } for (x = 0; x < 3; x++) for (y = 0; y < 3; y++) { /* P */ x_ = x + 1; y_ = y - 1; if (y_ < 0) y_ = 0; if (x_ < 3) dq[x_][y_] = (dq[x_][y_] + dp[x][y]) % m; /* L */ x_ = x - 1; y_ = y + 1; if (x_ < 0) x_ = 0; if (y_ < 3) dq[x_][y_] = (dq[x_][y_] + dp[x][y]) % m; } for (x = 0; x < 3; x++) for (y = 0; y < 3; y++) { dp[x][y] = dq[x][y]; dq[x][y] = 0; } } printf("%d\n", cnt); return 0; }

Compilation message (stderr)

linear_garden.c: In function 'main':
linear_garden.c:11:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 |  scanf("%d%d%s", &n, &m, s);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~
#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...