#include <iostream>
size_t count_rects(char* arr, size_t N){
size_t n = 0;
for(size_t i = 0; i < N; ++i){
for(size_t j = 0; j < N; ++j){
if(! arr[i*N + j])
continue;
for(size_t r = i; r < N; ++r){
if(! arr[r*N + j])
break;
for(size_t c = j; c < N; ++c){
if(! arr[r*N + c])
break;
arr[r*N + c] = 0;
}
}
++n;
}
}
return n;
}
int main(void){
const size_t N = 10;
char arr[N*N] = {
0,1,1,1,0,0,0,0,0,0,
0,1,1,1,0,0,0,0,0,0,
0,1,1,1,0,1,1,1,0,0,
0,0,0,0,0,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,
1,1,0,1,1,1,1,0,1,1,
1,1,0,1,1,1,1,0,1,1,
1,1,0,0,0,0,0,0,0,0,
1,1,0,1,1,0,0,1,1,1,
0,0,0,1,1,0,0,1,1,1
};
for(size_t i = 0; i < N; ++i){
for(size_t j = 0; j < N; ++j)
std::cout << (char)(arr[i*N+j] + '0');
std::cout << std::endl;
}
size_t n = count_rects(arr, N);
std::cout << "count rects: " << n << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCnNpemVfdCBjb3VudF9yZWN0cyhjaGFyKiBhcnIsIHNpemVfdCBOKXsKCXNpemVfdCBuID0gMDsKCglmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKXsKCQlmb3Ioc2l6ZV90IGogPSAwOyBqIDwgTjsgKytqKXsKCQkJaWYoISBhcnJbaSpOICsgal0pCgkJCQljb250aW51ZTsKCgkJCWZvcihzaXplX3QgciA9IGk7IHIgPCBOOyArK3IpewoKCQkJCWlmKCEgYXJyW3IqTiArIGpdKQoJCQkJCWJyZWFrOwoKCQkJCWZvcihzaXplX3QgYyA9IGo7IGMgPCBOOyArK2MpewoJCQkJCWlmKCEgYXJyW3IqTiArIGNdKQoJCQkJCQlicmVhazsKCgkJCQkJYXJyW3IqTiArIGNdID0gMDsKCQkJCX0KCQkJfQoJCQkrK247CgkJfQoJfQoJcmV0dXJuIG47Cn0KCgoKaW50IG1haW4odm9pZCl7Cgljb25zdCBzaXplX3QgTiA9IDEwOwoJY2hhciAgYXJyW04qTl0gPSB7CgkJMCwxLDEsMSwwLDAsMCwwLDAsMCwKCQkwLDEsMSwxLDAsMCwwLDAsMCwwLAoJCTAsMSwxLDEsMCwxLDEsMSwwLDAsCgkJMCwwLDAsMCwwLDEsMSwxLDAsMCwKCQkwLDAsMCwwLDAsMCwwLDAsMCwwLAoJCTEsMSwwLDEsMSwxLDEsMCwxLDEsCgkJMSwxLDAsMSwxLDEsMSwwLDEsMSwKCQkxLDEsMCwwLDAsMCwwLDAsMCwwLAoJCTEsMSwwLDEsMSwwLDAsMSwxLDEsCgkJMCwwLDAsMSwxLDAsMCwxLDEsMQoJfTsKCglmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKXsKCQlmb3Ioc2l6ZV90IGogPSAwOyBqIDwgTjsgKytqKQoJCQlzdGQ6OmNvdXQgPDwgKGNoYXIpKGFycltpKk4ral0gKyAnMCcpOwoJCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cgl9CgoJc2l6ZV90IG4gPSBjb3VudF9yZWN0cyhhcnIsIE4pOwoJc3RkOjpjb3V0IDw8ICJjb3VudCByZWN0czogIiA8PCBuIDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9