Wednesday, August 12, 2015

UVa 10502 - Counting Rectangles

// UVa 10502 - Counting Rectangles

#include <iostream>
#include <string>
#include <string.h>
using namespace std;

int main() {
	int n, m;
	cin >> n;
	;
	while (n) {
		cin >> m;
		int T[101][101];
		memset(T, 0, sizeof(T));
		for (int i = 1; i <= n; i++) {
			string l;
			cin >> l;
			for (int j = 1; j <= m; j++)
				T[i][j] = T[i - 1][j] + T[i][j - 1] - T[i - 1][j - 1] + (l[j - 1] - '0');
		}
		unsigned long long int sol = 0;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++)
				for (int a = i - 1; a >= 0; a--) {
					int b;
					for (b = j - 1; b >= 0; b--) {
						if (T[i][j] - T[i][b] - T[a][j] + T[a][b] == (i - a) * (j - b))
							sol++;
						else
							break;
					}
				}
		}
		cout << sol << endl;

		cin >> n;
	}
	return 0;
}

No comments:

Post a Comment