Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #define k 101
- int arr[k][k];
- int tot[9];
- int maxrow(int x, int y, int n, int arr[k][k]) {
- int i, top = 0;
- for(i = x; i < n; i++) {
- if(arr[i][y] == 1) {
- top++;
- }
- }
- return top;
- }
- int maxcol(int x, int y, int n, int arr[k][k]) {
- int i, down = 0;
- for(i = y; i < n; i++) {
- if(arr[x][i] == 1) {
- down++;
- }
- }
- return down;
- }
- int pode(int x, int y, int lim, int n, int arr[k][k]) {
- int i, j;
- for(i = y; i <= lim + y - 1; i++) {
- for(j = x; j <= lim + x - 1; j++) {
- if(arr[j][i] == 0) {
- return 0;
- }
- }
- }
- return 1;
- }
- int check(int n, int arr[k][k]) {
- int max = 0;
- int i, j, l, m, verify;
- for(i = 0; i < n; i++) {
- for(j = 0; j < n; j++) {
- if(arr[j][i] == 0) {
- continue;
- } else {
- l = maxrow(j, i, n, arr);
- m = maxcol(j, i, n ,arr);
- verify = min(l, m);
- if(pode(j, i, verify, n, arr)) {
- if(verify*verify > max) {
- max = verify*verify;
- }
- if(2*verify*verify >= tot[1]) {
- return verify*verify;
- }
- if(verify >= ceil(n / 2)) {
- return verify*verify;
- }
- } else {
- continue;
- }
- }
- }
- }
- return max;
- }
- int main() {
- int n, i, j;
- scanf("%d", &n);
- for(i = 0; i < n; i++) {
- for(j = 0; j < n; j++) {
- scanf("%d", &arr[j][i]);
- if(arr[j][i] == 1) {
- tot[1]++;
- }
- }
- }
- int res = check(n, arr);
- printf("%d", res);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement