Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- // Deu certo !!!
- int main ()
- {
- int i, j, k;
- int n, m;
- int s;
- int q;
- int valor;
- bool um;
- cin >> n >> m;
- int M[n + 1][m + 1], S[n + 1][m + 1];
- for(j = 0; j <= m; j++) // Zerando a linha [0] de M e S
- {
- M[0][j] = 0;
- S[0][j] = 0;
- }
- for(i = 0; i <= n; i++) // Zerando a coluna [0] de M e S
- {
- M[i][0] = 0;
- S[i][0] = 0;
- }
- for(i = 1; i <= n; i++)
- for(j = 1; j <= m; j++)
- {
- cin >> valor;
- if(valor) // Se o valor inserido for diferente de 0
- M[i][j] = 1;
- else // Se não
- M[i][j] = 0;
- }
- s = 0;
- for(j = 1; j <= m; j++) // Calculando a primeira linha da matriz S
- {
- s += M[1][j];
- S[1][j] = s;
- }
- s = 0;
- for(i = 1; i <= n; i++) // Calculando a primeira coluna da matriz S
- {
- s += M[i][1];
- S[i][1] = s;
- }
- for(i = 2; i <= n; i++) // Calculando as demais posições da matriz S
- for(j = 2; j <= m; j++)
- S[i][j] = M[i][j] + S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1];
- cin >> q; // Número de consultas
- for(k = 0; k < q; k++)
- {
- cin >> s; // Ordem das submatrizes
- s--;
- um = false;
- for(i = 1; i <= n - s && um == false; i++)
- for(j = 1; j <= m - s; j++)
- {
- valor = S[i + s][j + s] - S[i - 1][j + s] - S[i + s][j - 1] + S[i - 1][j - 1]; // Soma interna da submatriz s x s
- if(valor == (s + 1) * (s + 1)) // Se a soma interna da submatriz for igual ao valor de s x s
- um = true; // Resposta = yes
- }
- if(um)
- cout << "yes" << "\n";
- else
- cout << "no" << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement