Informatică, întrebare adresată de Diuva, 8 ani în urmă

Cerinţa
Se dă un sir cu n elemente, numere naturale nenule cu cel mult 2 cifre fiecare, în care cel puţin un element se repetă. Să se determine lungimea maximă a unei secvenţe de elemente din şir, cu proprietatea că primul şi ultimul element din secvenţă au aceeaşi valoare.

Date de intrare
Fişierul de intrare lungime.in conţine pe prima linie numărul n; urmează n numere naturale separate prin spaţii, reprezentând elementele şirului, ce pot fi dispuse pe mai multe linii.

Date de ieşire
Fişierul de ieşire lungime.out va conţine pe prima linie numărul L, reprezentând lungimea maximă determinată.

Restricţii şi precizări
1 ≤ n ≤ 100.000

Răspunsuri la întrebare

Răspuns de boiustef
1

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("lungime.in");

ofstream g("lungime.out");

int i, n, L, num, vc[100], primaap[100], lung;

int main()

{

   f >> n;

   for (i=1; i<=n; ++i)

   {

       f >> num;

       if (vc[num]==0)

       {

           vc[num]=1; primaap[num]=i;        }

       else

       {

           lung=i-primaap[num]+1;

           if (lung>L) L=lung;

       }

   }

   g << L;

}


boiustef: Explicaţii: În vectorul vc punem 1 la prima apariţie a numărului şi în vectorul primaap scriem indicele în momentul primei apariţii în şir, iar dacă vc[i]=1, deci numarul se repetă în şir şi calculam lungimea secvenţei de la prima apariţie la cea curentă
boiustef: Pentru o înţelegere mai bună pune în prima linie numerele din fişier, în a doua linie vectorul vc şi în a trei linie vectorul primaap, toate unele sub altele, iar în linia a patra faci calculele pt lungimea secvenţei
Alte întrebări interesante