Rezolvare completă PbInfo #2902 Pavaj

Cerința

Curtea bunicului are forma unei matrice cu n linii și m coloane și este pavată cu n*m dale, o parte dintre acestea fiind deteriorate. Bunicul a realizat un plan al curții în care a marcat cu 0 dalele deteriorate și cu 1 pe cele nedeteriorate.

Bunicul a primit k oferte pentru a vinde zone dreptunghiulare ale curții. Fiecare zonă este determinată de coordonatele l1 c1 l2 c2 a două colțuri opuse ale ei. Pentru fiecare zonă bunicul dorește să afle dacă conține doar dale nedeteriorate, doar dale deteriorate sau conține și dale deteriorate și dale nedeteriorate.

Date de intrare

Fișierul de intrare pavaj.in conține pe prima linie numerele n m k. Următoarele n linii conțin câte m valori 0 sau 1, reprezentând planul curții. Următoarele k linii conțin câte patru valori, l1 c1 l2 c2, reprezentând coordonatele a două colțuri opuse ale unei zone.

Date de ieșire

Fișierul de ieșire pavaj.out va conține k linii. Fiecare linie va conține valoarea 0, 1 sau 2, după cum zona corespunzătoare din fișierul de intrare:

  • conține doar dale deteriorate
  • conține doar dale nedeteriorate
  • conține atât dale nedeteriorate, cât și dale deteriorate

Restricții și precizări

  • 1 ≤ n, m ≤ 1000
  • 1 ≤ k ≤ 100000
  • 1 ≤ l1, l2 ≤ n
  • 1 ≤ c1, c2 ≤ m
  • numerotarea liniilor și a coloanelor începe de la 1
  • pentru 50% din teste 1 ≤ n, m, k ≤ 1000

Exemplu

pavaj.in

4 6 3
0 0 1 1 1 0
0 0 1 1 1 0
0 0 0 0 0 1
1 0 1 0 1 0
1 1 3 2
2 4 1 5
1 6 4 2

pavaj.out

0
1
2

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 Pavaj:

#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,k, A[1001][1001];

int main()
{
    fin >> n >> m >> k;
    for(int i = 1; i <= n ; i ++)
        for(int j = 1 ; j <= m ; j ++)
            fin >> A[i][j], A[i][j] = A[i][j-1] + A[i-1][j] - A[i-1][j-1] + A[i][j];
    int l1, c1, l2, c2;
    for(int i = 1 ; i <= k ; i ++)
    {
        fin >> l1 >> c1 >> l2 >> c2;
        if(l1 > l2)
            swap(l1, l2);
        if(c1 > c2)
            swap(c1, c2);
        int s= A[l2][c2] - A[l1-1][c2] - A[l2][c1-1] + A[l1-1][c1-1];
        if(s == 0)
            fout << "0
";
        else
            if(s == (l2-l1+1) * (c2-c1+1))
                fout << "1
";
            else
                fout << "2
";
    }
    fin.close();
    fout.close();
    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 #2902 Pavaj

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2902 Pavaj 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!