Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- using namespace std;
- const int m = 2500000;
- int n, a[51][51], sum[51][51], cnt[2 * m + 1];
- long long ans;
- int getsum(int x, int y, int x2, int y2)
- {
- return sum[x2][y2] - sum[x - 1][y2] - sum[x2][y - 1] + sum[x - 1][y - 1] + m;
- }
- int main()
- {
- //freopen("in", "r", stdin);
- scanf("%d", &n);
- for (int i = 1; i <= n; ++i)
- for (int j = 1; j <= n; ++j)
- scanf("%d", &a[i][j]);
- for (int i = 1; i <= n; ++i)
- for (int j = 1; j <= n; ++j)
- sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + a[i][j];
- for (int i = 1; i <= n; ++i)
- for (int j = 1; j <= n; ++j)
- {
- //down - right
- for (int k = 1; k < i; ++k)
- for (int l = 1; l < j; ++l)
- cnt[getsum(k, l, i - 1, j - 1)]++;
- for (int k = i; k <= n; ++k)
- for (int l = j; l <= n; ++l)
- ans += cnt[getsum(i, j, k, l)];
- for (int k = 1; k < i; ++k)
- for (int l = 1; l < j; ++l)
- cnt[getsum(k, l, i - 1, j - 1)]--;
- //up - right
- for (int k = n; k > i; --k)
- for (int l = 1; l < j; ++l)
- cnt[getsum(i + 1, l, k, j - 1)]++;
- for (int k = i; k > 0; --k)
- for (int l = j; l <= n; ++l)
- ans += cnt[getsum(k, j, i, l)];
- for (int k = n; k > i; --k)
- for (int l = 1; l < j; ++l)
- cnt[getsum(i + 1, l, k, j - 1)]--;
- }
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement