1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "dzialka.h"
#include "message.h"

#include <cstdio>

#define N 75000

long long int wiersz[2][N + 10];

int main() {
	if (MyNodeId() > 0) {
    	return 0;
	}

	int r = GetFieldHeight();
	int c = GetFieldWidth();

	long long wynik = 0;
	long long posredni = 0;
	long long min = 0;

	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			if (IsUsableCell(i, j) == 1) {
				if (i == 0) {
					wiersz[i % 2][j] = 1;
				} else {
					wiersz[i % 2][j] = wiersz[1 - (i % 2)][j] + 1;
				}
				
				posredni = 0;

				for (int k = j; k >= 0; k--) {
					if (k == j) {
						min = wiersz[i % 2][k];
					
					} else {
						if (min > wiersz[i % 2][k]) {
							min = wiersz[i % 2][k];
						}
					}

					posredni += min;

					if (min == 0) {
						break;
					}

				}

				wynik += posredni;

			} else {
				wiersz[i % 2][j] = 0;
			}
		}
	}
	
	printf("%lld\n", wynik);

	return 0;
}