Public feed
#601376
#include <vector>#include <iostream>using namespace std;struct Info { int min, max;};typedef vector<vector<int> > Matriu;int minim(int a, int b) { if (a < b) return a; return b;}vector<Info> info_capes(const Matriu& mat) { int n = mat.size(); int m = mat[0].size(); int nc_max; //nombre de capes màxim int a = minim(n,m); if (a%2 == 0) nc_max = a/2; else nc_max = a/2 + 1; int capes = 0; vector<Info> r(nc_max); bool final = false; while (not final) { // mentre no tinguem el nombre màxim de capes, busquem min i max en cada capa. // recorrem les dues files de la capa d'esquerra a dreta // les columnes de la capa, de dalt a baix. int min = mat[capes][capes]; int max = mat[capes][capes]; // //files // for (int j = capes; j < m-capes; ++j) { //fila superior if (mat[capes][j] > max) max = mat[capes][j]; if (mat[capes][j] < min) min = mat[capes][j]; //inferior int l = n - 1 - capes; if (mat[l][j] > max) max = mat[l][j]; if (mat[l][j] < min) min = mat[l][j]; } // //columnes // for (int k = capes; k < n-capes; ++k) { //columna de l'esquerra if (mat[k][capes] > max) max = mat[k][capes]; if (mat[k][capes] < min) min = mat[k][capes]; //columna de la dreta int l = n - 1 - k; int f = m- 1 - capes; if (mat[l][f] > max) max = mat[l][f]; if (mat[l][f] < min) min = mat[l][f]; } r[capes].min = min; r[capes].max = max; ++capes; final = capes == nc_max; } return r;}int main() { int n = 1; int f, c; while (cin >> f >> c) { Matriu mat(c, f); for (int i = 0; i < f; ++i) { for (int j = 0; j < c; ++j) { cin >> mat[j][i]; } } vector<Info> v = info_capes(mat); cout << "matriu " << n << ":"; for (int i = 0; i < v.size(); ++i) { cout << " " << v[i].min << "," << v[i].max; } cout << endl; ++n; }}