Rezolvare completă PbInfo #569 Stergeri

Cerința

Gigel a învățat la matematică adunarea mai multor termeni și acum lucrează la temă. Aceasta constă în scrierea a n egalități, fiecare fiind formată din m termeni, dispuși în ordine în stânga și în dreapta semnului =. Gigel a reușit să-și facă tema, însă maleficul Costel a profitat de neatenția lui Gigel și a șters toate semnele dintre numerele scrise, atât cele de adunare(+) cât și semnul egal(=). Ajutați-l pe Gigel să reconstituie egalitățile la care a lucrat.

Date de intrare

Programul citește de la tastatură numerele n m, iar apoi n șiruri cu câte m numere naturale, fiecare șir reprezentând termenii dintr-o egalitate.

Date de ieșire

Programul va afișa pe ecran numărul n perechi de numere s d. Acestea corespund, în ordine, fiecărei egalități și anume s reprezintă numărul de termeni din stângă semnului =, iar d reprezintă numărul de termeni din dreapta semnului =.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • 1 ≤ m ≤ 1000
  • pentru fiecare egalitate termenii sunt numere naturale nenule mai mici decât 1000
  • toate egalitățile scrise de Gigel au fost inițial corecte
  • pentru fiecare egalitate s+d=m
  • maleficul Costel nu a modificat ordinea termenilor

Exemplu

Intrare

3 5
1 2 3 1 5
7 4 3 1 15
1 7 2 3 3

Ieșire

3 2
4 1
2 3

Explicație

Pentru prima egalitate, 1 + 2 + 3 = 1 + 5

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

#include <iostream>
#include <cassert>
using namespace std;

int n , m , v[1005], s[1005], R[1005];

int main() {
    assert(cin >> n >> m);
    for(int k = 1 ; k <= n ; ++k)
    {
        for (int i = 1; i <= m; ++i)
        {
            assert(cin >> v[i]);
            assert(v[i]<= 1000);
        }
        for (int i = 1; i <= m; ++i)
            s[i] = s[i-1] + v[i];
        int p = 0;
        for(int i = 1 ; i <= m ; ++i)
            if(s[i] == s[m] - s[i])
                p = i;
        R[k] = p;
    }
    for(int i = 1; i <= n ; ++i)
        cout << R[i]  << " " << m - R[i] << "
";
    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 #569 Stergeri

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