Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- #include <stdio.h>
- #include <math.h>
- #include <cmath>
- using namespace std;
- #define k 101
- int max = INT_MIN;
- int arr[k][k];
- map<int, int> tot;
- vector<int> v;
- 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;
- }
- bool 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 false;
- }
- }
- }
- return true;
- }
- int check(int n, int arr[k][k]) {
- 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)) {
- v.push_back(verify*verify);
- if(2*verify*verify >= tot[1]) {
- return verify*verify;
- }
- if(verify >= ceil(n / 2)) {
- return verify*verify;
- }
- } else {
- continue;
- }
- }
- }
- }
- return *max_element(v.begin(), v.end());
- }
- 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