Buna!
Ma puteti ajuta cu problema #2533 SecventaIncadrata de pe pbinfo?
Cerința
Numim secvență încadrată a unui șir de numere naturale un subșir al acestuia, format din termeni aflați pe poziții consecutive în șirul dat, subșir care începe și se termină cu aceeași valoare. Lungimea secvenței este egală cu numărul de termeni ai acesteia.
Să se determine secvențele încadrate dintr-un șir, care au lungimea maximă.
Date de intrare
Fișierul de intrare secventaincadrata.in conține cel puțin două și cel mult 106 numere naturale din intervalul [0,9], separate printr-un spațiu.
Date de ieșire
Fișierul de ieșire secventaincadrata.out va conține pe prima linie numărul L, reprezentând lungimea maximă a secvențelor încadrate, iar pe a doua linie a fișierului valoarea primului termen al fiecărei secvențe încadrate de lungime maximă, în ordine crescătoare și separate printr-un spațiu.
Restricții și precizări
în șir există ce puțin doi termeni egali
proiectați un algoritm eficient din punctul de vedere al timpului de executare și a memoriei utilizate
se recomandă o soluție care să evite stocarea tuturor valorilor citite într-un tablou sau într-o altă structură de date similară
Exemplu
secventaincadrata.in
3 1 5 2 4 5 5 2 5 9 5 7 4 6 8 0 8
secventaincadrata.out
9
4 5
Explicație
Cele două secvențe încadrate de lungime maximă egală cu 9, sunt 5 2 4 5 5 2 5 9 5, respectiv 4 5 5 2 5 9 5 7 4.
Multumesc!
Răspunsuri la întrebare
Răspuns de
6
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("secventaincadrata.in");
ofstream g("secventaincadrata.out");
int cif, poz[10], lung[10], c, lungmax;
int main()
{
while (f>>cif)
{
++c;
if (poz[cif]==0) { poz[cif]=c; lung[cif]=1; }
else lung[cif]=c-poz[cif]+1;
}
for (cif=0; cif<10; ++cif)
if (lung[cif]>lungmax) lungmax=lung[cif];
g << lungmax << "\n";
for (cif=0; cif<10; ++cif)
if (lung[cif]==lungmax) g << cif << " ";
}
Explicație:
sikesjack1:
Multumesc muult!!
în vectorul poz semnalez prima apariţie a cifrei, iar în vectorul lung calculez lungimea secvenţei dacă cifra din poz se repetă
Fișierul de intrare secventaincadrata.in conține cel puțin două și cel mult 106 numere naturale din intervalul [0,9], separate printr-un spațiu.
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă