aboutsummaryrefslogtreecommitdiff
path: root/2023/11/11b.c
diff options
context:
space:
mode:
Diffstat (limited to '2023/11/11b.c')
-rw-r--r--2023/11/11b.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/2023/11/11b.c b/2023/11/11b.c
new file mode 100644
index 0000000..edb0fd6
--- /dev/null
+++ b/2023/11/11b.c
@@ -0,0 +1,39 @@
1#include <inttypes.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8#define ABS(a) ((a)>0 ? (a) : -(a))
9
10uint8_t dr[N], dc[N];
11int64_t i, j, k, n, p, g[N*N][2];
12
13int main() {
14 char line[N];
15 for (i = 0; fgets(line, N, stdin) != NULL; i++) {
16 for (j = 0; line[j] != '\n'; j++) {
17 if (line[j] == '#') {
18 g[n][0] = i;
19 g[n++][1] = j;
20 dr[i] = dc[j] = 1;
21 }
22 }
23 }
24
25 for (k = 1; k < i; k++) dr[k] += dr[k-1];
26 for (k = 1; k < j; k++) dc[k] += dc[k-1];
27
28 for (i = 0; i < n; i++) {
29 g[i][0] += 999999 * (g[i][0] - dr[g[i][0]]);
30 g[i][1] += 999999 * (g[i][1] - dc[g[i][1]]);
31 }
32
33 for (i = 0; i < n; i++)
34 for (j = i+1; j < n; j++)
35 p += ABS(g[i][0] - g[j][0]) + ABS(g[i][1] - g[j][1]);
36
37 printf("%" PRId64 "\n", p);
38 return 0;
39}

Generated with cgit - Back to sebastiano.tronto.net