fbpx

Problema #1374 – numere9 – Rezolvari PBInfo

de Mihai-Alexandru

Enunt

Mircea este pasionat de programare. El a început să rezolve probleme din ce în ce mai grele. Astfel a ajuns la o problemă, care are ca date de intrare un tablou pătratic cu n linii şi n coloane, componente tabloului fiind toate numerele naturale distincte de la 1 la n2. Pentru a verifica programul pe care l-a scris îi trebuie un fişier care să conţină tabloul respectiv. După ce a creat acest fişier, fratele său, pus pe şotii îi umblă în fişier şi îi schimbă câteva numere consecutive, cu numărul 0. Când se întoarce Mircea de la joacă constată cu stupoare că nu îi merge programul pentru testul respectiv. După câteva ore de depanare îşi dă seama că programul lui este corect şi că fişierul de intrare are probleme.

Cerința

Scrieţi un program care să-l ajute pe Mircea, găsindu-i cel mai mic şi cel mai mare dintre numerele consecutive schimbate de fratele său.

Date de intrare

În fişierul numere9.in se dă pe prima linie n, iar pe următoarele n linii elementele tabloului, câte n elemente pe o linie, separate între ele prin câte un spaţiu, după modificările făcute de fratele lui Mircea.

Date de ieșire

În fişierul numere9.out se va scrie pe un singur rând cu un singur spaţiu între ele numerele cerute (primul fiind cel mai mic).

Restricții și precizări

  • 0<n≤500
  • Fratele lui Mircea schimbă cel puţin un număr în fişier.
  • Numerele schimbate de fratele lui Mircea sunt mai mici sau cel mult egale cu 60000.

Exemplu

numere9.in

3
5 0 7
0 0 1
6 9 8

numere9.out

2 4

Explicație

În fişierul de intrare au fost înlocuite cu 0 numerele 2, 3, 4.

#include <bits/stdc++.h>
using namespace std;
ifstream cin("numere9.in");
ofstream cout("numere9.out");
int main()
{
    int n , x , p = 0 , f[60000]={0} , ok = 0 , nr1 , nr2;
    cin >> n;
    for(int i = 0 ; i < n ; ++i)
    {
        for(int j = 0 ; j < n ; ++j)
        {
            cin >> x;
            if(x > p && x<= 60000) p = x;
            if(x <= 60000)f[x]++;
        }
    }
    if(p < n * n && p != 60000) p = n * n;
    for(int i = 1 ; i <= p ; ++i)
    {
        if(f[i]==0 && ok==0)
        {
            nr1 = i;
            ok++;
        }
        if(f[i]==0) nr2 = i;
    }
    cout << nr1 << " " << nr2;
}
Comentarii

S-ar putea sa iti placa