Cod sursa(job #2946969)

Utilizator 11111theodorSebastian Theodor-Ioan 11111theodor Data 25 noiembrie 2022 15:00:15
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;

ifstream fin("matprod.in");
ofstream fout("matprod.out");

const int maxN = 1005;
int n, mat[maxN][maxN], sum[maxN][maxN], prod[maxN][maxN];

/// valoarea pt (i, j) este valoarea precedentului + cat adauga elementul de pe (i, j) (adica suma elementelor de pe drumul pana la precedent * mat[i][j]

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            fin >> mat[i][j];
    for(int i = 1; i <= n; i++) /// precedentul lui este ala de sus (deci e putin diferit)
    {
        sum[i][1] = sum[i - 1][1] + mat[i][1];
        prod[i][1] = prod[i - 1][1] + sum[i - 1][1] * mat[i][1];
    }
    for(int i = 1; i <= n; i++)
    {
        for(int j = 2; j <= n; j++) /// precedentul e ala din stanga
        {
            sum[i][j] = sum[i][j - 1] + mat[i][j];
            prod[i][j] = prod[i][j - 1] + sum[i][j - 1] * mat[i][j];
        }
    }
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
            fout << prod[i][j] << ' ';
        fout << '\n';
    }
    return 0;
}