2098 - Meteo: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
== | == Enunț == | ||
Centrul de meteorologie dintr-o ţară îndepărtată, aflată aproape de Polul Nord, doreşte să stabilească modul în care încălzirea globală afectează temperaturile din acea ţară. Ei notează pe parcursul a N zile consecutive temperaturile maxime zilnice şi sunt interesaţi să determine cea mai lungă perioadă continuă de timp în care temperaturile înregistrate în zile consecutive au alternat ca semn. | Centrul de meteorologie dintr-o ţară îndepărtată, aflată aproape de Polul Nord, doreşte să stabilească modul în care încălzirea globală afectează temperaturile din acea ţară. Ei notează pe parcursul a N zile consecutive temperaturile maxime zilnice şi sunt interesaţi să determine cea mai lungă perioadă continuă de timp în care temperaturile înregistrate în zile consecutive au alternat ca semn. | ||
Line 16: | Line 16: | ||
* Temperatura de 0 grade va fi considerată pozitivă. | * Temperatura de 0 grade va fi considerată pozitivă. | ||
== | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
; meteoin.txt | ; meteoin.txt | ||
Line 22: | Line 22: | ||
: 1 -5 -3 2 -1 7 -2 5 1 7 -9 0 -1 6 -1 -8 | : 1 -5 -3 2 -1 7 -2 5 1 7 -9 0 -1 6 -1 -8 | ||
; Ieșire | ; Ieșire | ||
: Datele de intrare corespund restricțiilor impuse | |||
; meteoout.txt | ; meteoout.txt | ||
: 6 | : 6 | ||
: -3 2 -1 7 -2 5 | : -3 2 -1 7 -2 5 | ||
== | === Explicație === | ||
Studiul a fost efectuat pe durata a 16 zile. În această perioadă au existat două secvenţe de zile consecutive având lungime maximă (6) şi în care temperaturile au alternat ca semn. În fişierul de ieşire a fost afişată prima dintre ele, cea mai recentă fiind 7 -9 0 -1 6 -1. | |||
== Exemplul 2 == | |||
; Intrare | ; Intrare | ||
; meteoin.txt | ; meteoin.txt | ||
Line 32: | Line 36: | ||
: 0 1 | : 0 1 | ||
; Ieșire | ; Ieșire | ||
: | : Datele de intrare NU corespund restricțiilor impuse | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#2098 - Meteo | #2098 - Meteo | ||
def validare_date(n_zile_consecutive, temperaturi): | def validare_date(n_zile_consecutive, temperaturi): | ||
if not (3 < n_zile_consecutive <= 1000): | if not (3 < n_zile_consecutive <= 1000): | ||
Line 70: | Line 75: | ||
def main(): | def main(): | ||
with open("meteoin.txt", "r") as f: | |||
n_zile_consecutive = int(f.readline()) | |||
temperaturi = list(map(int, f.readline().split())) | |||
if validare_date(n_zile_consecutive, temperaturi): | |||
print("Datele de intrare corespund restricțiilor impuse") | |||
else: | |||
print("Datele de intrare NU corespund restricțiilor impuse") | |||
exit(0) | |||
lungime_maxima, secventa_maxima = determina_secventa(n_zile_consecutive, temperaturi) | |||
with open("meteoout.txt", "w") as f: | |||
if lungime_maxima < 2: | |||
f.write("0\n") | |||
else: | |||
f.write(f"{lungime_maxima}\n") | |||
f.write(" ".join(map(str, secventa_maxima))) | |||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 09:58, 11 December 2023
Enunț[edit | edit source]
Centrul de meteorologie dintr-o ţară îndepărtată, aflată aproape de Polul Nord, doreşte să stabilească modul în care încălzirea globală afectează temperaturile din acea ţară. Ei notează pe parcursul a N zile consecutive temperaturile maxime zilnice şi sunt interesaţi să determine cea mai lungă perioadă continuă de timp în care temperaturile înregistrate în zile consecutive au alternat ca semn.
Cerința[edit | edit source]
Scrieţi un program care, pe baza temperaturilor înregistrate pe parcursul a N zile consecutive, determină o succesiune de zile consecutive având lungime maximă pentru care temperaturile înregistrate au alternat ca semn. Dacă există mai multe astfel de secvenţe, meteorologii sunt interesaţi de cea mai recentă. Dacă nu există măcar două zile consecutive cu temperaturi alternante ca semn, ei vor înregistra rezultatul 0.
Date de intrare[edit | edit source]
Fişierul de intrare meteoin.txt conţine pe prima linie numărul natural N, reprezentând numărul total de zile pentru care se efectuează studiul. Pe cea de-a doua linie vor fi scrise N numere întregi separate prin spaţii, al i-lea număr de pe linie fiind temperatura maximă zilnică înregistrată în ziua i a studiului (1≤i≤N).
Date de ieșire[edit | edit source]
Fişierul de ieşire meteoout.txt va conţine pe prima linie un număr natural NrMax, reprezentând numărul maxim de zile consecutive pentru care temperaturile au alternat ca semn. Pe cea de a doua linie vor fi scrise NrMax valori întregi, separate prin spaţii, reprezentând temperaturile (alternante ca semn) înregistrate în cele NrMax zile. În cazul în care nu există nici măcar două zile consecutive cu temperaturi alternante ca semn, fişierul de ieşire va conţine o singură linie, pe care va fi scrisă valoarea 0.
Restricții și precizări[edit | edit source]
- 4 ⩽ N ⩽ 1.000
- Temperaturile maxime zilnice sunt numere întregi ce aparţin intervalului [-50,50].
- Temperatura de 0 grade va fi considerată pozitivă.
Exemplul 1[edit | edit source]
- Intrare
- meteoin.txt
- 16
- 1 -5 -3 2 -1 7 -2 5 1 7 -9 0 -1 6 -1 -8
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- meteoout.txt
- 6
- -3 2 -1 7 -2 5
Explicație[edit | edit source]
Studiul a fost efectuat pe durata a 16 zile. În această perioadă au existat două secvenţe de zile consecutive având lungime maximă (6) şi în care temperaturile au alternat ca semn. În fişierul de ieşire a fost afişată prima dintre ele, cea mai recentă fiind 7 -9 0 -1 6 -1.
Exemplul 2[edit | edit source]
- Intrare
- meteoin.txt
- 2
- 0 1
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 2098 - Meteo
def validare_date(n_zile_consecutive, temperaturi):
if not (3 < n_zile_consecutive <= 1000): return False if len(temperaturi) != n_zile_consecutive: return False for temp in temperaturi: if not (-50 <= temp <= 50): return False return True
def determina_secventa(n_zile_consecutive, temperaturi):
secventa_maxima = [] lungime_maxima = 0 secventa_curenta = [temperaturi[0]] lungime_curenta = 1
for i in range(1, n_zile_consecutive): if temperaturi[i] * temperaturi[i - 1] < 0: secventa_curenta.append(temperaturi[i]) lungime_curenta += 1 else: secventa_curenta = [temperaturi[i]] lungime_curenta = 1
if lungime_curenta > lungime_maxima: lungime_maxima = lungime_curenta secventa_maxima = secventa_curenta.copy()
return lungime_maxima, secventa_maxima
def main():
with open("meteoin.txt", "r") as f: n_zile_consecutive = int(f.readline()) temperaturi = list(map(int, f.readline().split()))
if validare_date(n_zile_consecutive, temperaturi): print("Datele de intrare corespund restricțiilor impuse") else: print("Datele de intrare NU corespund restricțiilor impuse") exit(0)
lungime_maxima, secventa_maxima = determina_secventa(n_zile_consecutive, temperaturi)
with open("meteoout.txt", "w") as f: if lungime_maxima < 2: f.write("0\n") else: f.write(f"{lungime_maxima}\n") f.write(" ".join(map(str, secventa_maxima)))
if __name__ == "__main__":
main()
</syntaxhighlight>