1394 - Devt: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
== Enunt == | == Enunt == | ||
Într-o zi, Gigel a găsit pe masa tatălui său o foaie A4 pe care era trecut șirul denumit “devt” sub forma 1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, ... , n. Dedesubtul acestui șir găsește un text alcătuit din k întrebări de forma a, b cu semnificația “Câte numere din acest șir se află în intervalul [a,b]?”. | Într-o zi, Gigel a găsit pe masa tatălui său o foaie A4 pe care era trecut șirul denumit “devt” sub forma '''1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, ... , n'''. Dedesubtul acestui șir găsește un text alcătuit din '''k''' întrebări de forma '''a, b''' cu semnificația “Câte numere din acest șir se află în intervalul '''[a,b]'''?”. | ||
== Cerința == | == Cerința == | ||
Ajutați-l pe Gigel să răspundă corect la toate cele k întrebări. | Ajutați-l pe Gigel să răspundă corect la toate cele '''k''' întrebări. | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare devtin.txt conține pe prima linie numerele naturale n și k, iar pe următoarele k linii numerele a, b cu semnificația din enunț. | Fișierul de intrare '''devtin.txt''' conține pe prima linie numerele naturale '''n''' și '''k''', iar pe următoarele '''k''' linii numerele '''a, b''' cu semnificația din enunț. | ||
== Date de ieșire == | == Date de ieșire == | ||
Fișierul de ieșire devtout.txt va conține k linii, pe fiecare linie i aflându-se un număr natural, reprezentând răspunsul întrebării i. | Fișierul de ieșire '''devtout.txt''' va conține '''k''' linii, pe fiecare linie '''i''' aflându-se un număr natural, reprezentând răspunsul întrebării '''i'''. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
*0 ⩽ a ⩽ b ⩽ n ⩽ 100000 | *'''0 ⩽ a ⩽ b ⩽ n ⩽ 100000''' | ||
*1 ⩽ k ⩽ 5000 | *'''1 ⩽ k ⩽ 5000''' | ||
*n aparține șirului devt | *'''n''' aparține șirului devt | ||
== Exemplu 1 == | == Exemplu 1 == | ||
; | ;'''devtin.txt''' | ||
:25 5 | :25 5 | ||
:3 7 | :3 7 | ||
Line 20: | Line 20: | ||
:16 24 | :16 24 | ||
:12 24 | :12 24 | ||
; | ;'''devtout.txt''' | ||
:2 | :2 | ||
:6 | :6 | ||
:1 | :1 | ||
:6 | :6 | ||
:9 | :9 | ||
== Explicație == | |||
:În intervalul [3,7] se află 2 numere din șir. | :În intervalul '''[3,7]''' se află '''2''' numere din șir. | ||
:În intervalul [12,20] se află 6 numere din șir. | :În intervalul '''[12,20]''' se află '''6''' numere din șir. | ||
:În intervalul [3,4] se află 1 număr din șir. | :În intervalul '''[3,4]''' se află '''1''' număr din șir. | ||
:În intervalul [16,24] se află 6 numere din șir. | :În intervalul '''[16,24]''' se află '''6''' numere din șir. | ||
:În intervalul [12,24] se află 9 numere din șir. | :În intervalul '''[12,24]''' se află '''9''' numere din șir. | ||
<br> | <br> | ||
== Exemplu 2 == | == Exemplu 2 == | ||
;devtin.txt | ;'''devtin.txt''' | ||
:0 2 | :0 2 | ||
:-1 2 | :-1 2 | ||
:-4 -2 | :-4 -2 | ||
;devtout.txt | ;'''devtout.txt''' | ||
: Nu au fost respectate cerintele impuse | : Nu au fost respectate cerintele impuse | ||
<br> | <br> | ||
Line 69: | Line 69: | ||
# Verificare restricții | # Verificare restricții | ||
if not is_valid_input(n, k, intervals): | if not is_valid_input(n, k, intervals): | ||
with open("devtout.txt", "w") as file_out: | |||
file_out.write("Nu au fost respectate cerintele impuse") | |||
return | return | ||
Line 88: | Line 89: | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 12:02, 6 January 2024
Enunt[edit | edit source]
Într-o zi, Gigel a găsit pe masa tatălui său o foaie A4 pe care era trecut șirul denumit “devt” sub forma 1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, ... , n. Dedesubtul acestui șir găsește un text alcătuit din k întrebări de forma a, b cu semnificația “Câte numere din acest șir se află în intervalul [a,b]?”.
Cerința[edit | edit source]
Ajutați-l pe Gigel să răspundă corect la toate cele k întrebări.
Date de intrare[edit | edit source]
Fișierul de intrare devtin.txt conține pe prima linie numerele naturale n și k, iar pe următoarele k linii numerele a, b cu semnificația din enunț.
Date de ieșire[edit | edit source]
Fișierul de ieșire devtout.txt va conține k linii, pe fiecare linie i aflându-se un număr natural, reprezentând răspunsul întrebării i.
Restricții și precizări[edit | edit source]
- 0 ⩽ a ⩽ b ⩽ n ⩽ 100000
- 1 ⩽ k ⩽ 5000
- n aparține șirului devt
Exemplu 1[edit | edit source]
- devtin.txt
- 25 5
- 3 7
- 12 20
- 3 4
- 16 24
- 12 24
- devtout.txt
- 2
- 6
- 1
- 6
- 9
Explicație[edit | edit source]
- În intervalul [3,7] se află 2 numere din șir.
- În intervalul [12,20] se află 6 numere din șir.
- În intervalul [3,4] se află 1 număr din șir.
- În intervalul [16,24] se află 6 numere din șir.
- În intervalul [12,24] se află 9 numere din șir.
Exemplu 2[edit | edit source]
- devtin.txt
- 0 2
- -1 2
- -4 -2
- devtout.txt
- Nu au fost respectate cerintele impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1394 - Devt
def is_valid_input(n, k, intervals):
if not (0 <= k <= 5000): return False if not (1 <= n <= 100000): return False for a, b in intervals: if not (0 <= a <= b <= n): return False return True
def count_numbers_in_interval(a, b, sequence):
count = 0 for num in sequence: if a <= num <= b: count += 1 return count
def main():
# Citirea datelor de intrare with open("devtin.txt", "r") as file: n, k = map(int, file.readline().split()) intervals = [list(map(int, file.readline().split())) for _ in range(k)]
# Verificare restricții if not is_valid_input(n, k, intervals): with open("devtout.txt", "w") as file_out: file_out.write("Nu au fost respectate cerintele impuse") return
# Calculul răspunsurilor answers = [] sequence = [1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25] # Acesta este șirul "devt"
for interval in intervals: a, b = interval result = count_numbers_in_interval(a, b, sequence) answers.append(result)
# Scrierea rezultatelor în fișierul de ieșire with open("devtout.txt", "w") as file: for answer in answers: file.write(str(answer) + "\n")
if __name__ == "__main__":
main()
</syntaxhighlight>