Rezolvare completă PbInfo #2637 ZOO

Cerința

Intr-o gradina zoologica reprezentata printr-o matrice A cu n linii si m coloane. Fiecare cusca se afla intr-o pozitie din matrice si contine x animale. De exemplu daca A[2][6] = 5 inseamna ca in cusca de pe linia 2 si coloana 6 se afla 5 animale. Sa se raspunda la Q intrebari de forma i1, j1, i2, j2 unde raspunsul va fi numarul de animale din dreptunghiul din matrice cu cordonatele coltului din stanga sus i1 si j1 si cordonatele coltului din dreapta jos i2 si j2, unde i reprezinta linia si j coloana.

Date de intrare

Fișierul de intrare zoo.in conține pe prima linie numerele n si m, separate printr-un spatiu, iar pe urmatoarele n linii, cate m numere, reprezentand matricea. Pe linia n + 2 se afla numarul Q, iar pe urmatoarele Q linii, cate 4 numere (i1 j1 i2 j2) cu semnificatia din enunt.

Date de ieșire

Fișierul de ieșire zoo.out pe fiecare linie i raspunsul la intrebarea i.

Restricții și precizări

  • 1 ≤ n, m ≤ 100
  • 1 ≤ Q ≤ 100000
  • numarul maxim de animale dintr-o cusca este de 1.000.000.000
  • numerotarea liniilor si a coloanelor din matrice incepe de la 1

Exemplu

zoo.in

4 4
1 2 4 1
8 1 3 2
3 1 2 2
8 1 3 1
2
2 2 4 4
3 1 4 3

zoo.out

16
18

Explicație

16=1+3+2+1+2+2+1+3+1 si 18=3+1+2+8+1+3

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema ZOO:

#include <fstream>
#include <algorithm>

using namespace std;

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

const int Dim = 1001;
long long int a[Dim][Dim], n, m;
int Q;

long long int s[Dim][Dim];

int main()
{
    fin >> n >> m;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            fin >> a[i][j];

    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];

    int i1, j1, i2, j2;
    fin >> Q;
    while (Q--)
    {
        fin >> i1 >> j1 >> i2 >> j2;
        fout <<  s[i2][j2] - s[i1-1][j2] - s[i2][j1-1] + s[i1-1][j1-1] << '\n';
    }

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2637 ZOO

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2637 ZOO de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!