3935 - determinanta: Difference between revisions
No edit summary |
|||
Line 40: | Line 40: | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def | def is_valid_input(n, positions): | ||
# | # Verificăm dacă toate pozițiile sunt în limitele matricei | ||
for l, c in positions: | |||
if not (1 <= l <= n and 1 <= c <= n): | |||
return False | |||
return True | |||
return | |||
def read_input(file_name): | def read_input(file_name): | ||
with open(file_name, 'r') as file: | with open(file_name, 'r') as file: | ||
n = int(file.readline()) | n = int(file.readline()) | ||
positions = [tuple(map(int, file.readline().split())) for _ in range(n)] | |||
if is_valid_input(n, positions): | |||
matrix = [[0] * n for _ in range(n)] | matrix = [[0] * n for _ in range(n)] | ||
for | for l, c in positions: | ||
matrix[l-1][c-1] = 1 | matrix[l-1][c-1] = 1 | ||
return matrix, n | return matrix, n | ||
else: | |||
raise ValueError("Invalid input data") | |||
def write_output(file_name, result): | def write_output(file_name, result): | ||
Line 71: | Line 68: | ||
output_file = "determinantaout.txt" | output_file = "determinantaout.txt" | ||
# Citim matricea și dimensiunea din fișierul de intrare | try: | ||
# Citim matricea și dimensiunea din fișierul de intrare | |||
matrix, size = read_input(input_file) | |||
# Calculăm determinantul | |||
determinant_result = calc_determinant(matrix, size) | |||
# Scriem rezultatul în fișierul de ieșire | |||
write_output(output_file, determinant_result) | |||
except ValueError as e: | |||
print(f"Error: {e}") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 11:17, 29 December 2023
Cerinta
Se consideră o matrice cu n linii şi n coloane şi elemente egale cu 0 sau 1. Să se calculeze determinantul matricei.
Date de intrare
Fișierul de intrare determinantain.txt conține pe prima linie numărul n, iar pe următoarele n linii câte o pereche de numere naturale l, c, reprezentând faptul că elementul matricei de pe linia l şi coloana c are valoarea 1.
Date de iesire
Fișierul de ieșire determinantaout.txt va conține pe prima linie valoarea determinantului matricei.
Restrictii si precizari
- 2 ⩽ n ⩽ 100.000
- 1 ⩽ l,c ⩽ n
- Exceptând elementele din poziţiile (l,c), care sunt egale cu 1, celelalte elemente ale matricei au valoarea 0.
Exemplul 1
- determinantain.txt
- 3
- 1 1
- 2 2
- 3 3
- Datele introduse corespund restrictiilor impuse.
- determinantaout.txt
- 1
Exemplul 2
- determinantain.txt
- 3
- 2 2
- 3 3
- 2 2
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3" line="1">
def is_valid_input(n, positions):
# Verificăm dacă toate pozițiile sunt în limitele matricei for l, c in positions: if not (1 <= l <= n and 1 <= c <= n): return False return True
def read_input(file_name):
with open(file_name, 'r') as file: n = int(file.readline()) positions = [tuple(map(int, file.readline().split())) for _ in range(n)]
if is_valid_input(n, positions): matrix = [[0] * n for _ in range(n)] for l, c in positions: matrix[l-1][c-1] = 1 return matrix, n else: raise ValueError("Invalid input data")
def write_output(file_name, result):
with open(file_name, 'w') as file: file.write(str(result) + '\n')
if __name__ == "__main__":
input_file = "determinantain.txt" output_file = "determinantaout.txt"
try: # Citim matricea și dimensiunea din fișierul de intrare matrix, size = read_input(input_file)
# Calculăm determinantul determinant_result = calc_determinant(matrix, size)
# Scriem rezultatul în fișierul de ieșire write_output(output_file, determinant_result) except ValueError as e: print(f"Error: {e}")
</syntaxhighlight>