Submission #817119

#TimeUsernameProblemLanguageResultExecution timeMemory
817119rainboyCell Automaton (JOI23_cell)C11
16 / 100
394 ms127384 KiB
#include <stdio.h> #define N 100000 #define X 2000 #define T 1000 int min(int a, int b) { return a < b ? a : b; } unsigned int Z = 12345; int rand_() { return (Z *= 3) >> 1; } int xx[N], yy[N]; void sort(int *ii, int l, int r) { while (l < r) { int i = l, j = l, k = r, i_ = ii[l + rand_() % (r - l)], tmp; while (j < k) if (xx[ii[j]] == xx[i_]) j++; else if (xx[ii[j]] < xx[i_]) { tmp = ii[i], ii[i] = ii[j], ii[j] = tmp; i++, j++; } else { k--; tmp = ii[j], ii[j] = ii[k], ii[k] = tmp; } sort(ii, l, i); l = k; } } int main() { static int ii[N], dd[X * 2 + 1][X * 2 + 1], nn[T + 1]; int n, q, i, j, x, y, t, subtask; scanf("%d%d", &n, &q); for (i = 0; i < n; i++) scanf("%d%d", &xx[i], &yy[i]); subtask = 3; if (q != 1) subtask = 2; for (i = 0; i < n; i++) if (xx[i] != yy[i]) { subtask = 2; break; } if (subtask == 2) { for (x = 0; x <= X * 2; x++) for (y = 0; y <= X * 2; y++) dd[x][y] = T + 1; for (i = 0; i < n; i++) dd[X + xx[i]][X + yy[i]] = 0; for (x = 0; x <= X * 2; x++) { for (y = 1; y <= X * 2; y++) dd[x][y] = min(dd[x][y], dd[x][y - 1] + 1); for (y = X * 2 - 1; y >= 0; y--) dd[x][y] = min(dd[x][y], dd[x][y + 1] + 1); } for (y = 0; y <= X * 2; y++) { for (x = 1; x <= X * 2; x++) dd[x][y] = min(dd[x][y], dd[x - 1][y] + 1); for (x = X * 2 - 1; x >= 0; x--) dd[x][y] = min(dd[x][y], dd[x + 1][y] + 1); } for (x = 0; x <= X * 2; x++) for (y = 0; y <= X * 2; y++) if (dd[x][y] <= T) nn[dd[x][y]]++; while (q--) { scanf("%d", &t); printf("%d\n", nn[t]); } } else { for (i = 0; i < n; i++) ii[i] = i; sort(ii, 0, n); while (q--) { long long ans; scanf("%d", &t); if (t == 0) printf("%d\n", n); else { ans = 0; for (i = 0; i < n; i = j) { j = i + 1; while (j < n && xx[ii[j]] - xx[ii[j - 1]] <= t) j++; ans += (xx[ii[j - 1]] - xx[ii[i]] + t * 2) * 2; } for (i = 0; i + 1 < n; i++) if (xx[ii[i + 1]] - xx[ii[i]] == t) ans += t - 1; printf("%lld\n", ans); } } } return 0; }

Compilation message (stderr)

cell.c: In function 'main':
cell.c:40:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |  scanf("%d%d", &n, &q);
      |  ^~~~~~~~~~~~~~~~~~~~~
cell.c:42:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |   scanf("%d%d", &xx[i], &yy[i]);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cell.c:74:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |    scanf("%d", &t);
      |    ^~~~~~~~~~~~~~~
cell.c:84:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |    scanf("%d", &t);
      |    ^~~~~~~~~~~~~~~
#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...