🐍🧩 Π—Π°Π΄Π°Ρ‡Π° ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ латинского ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая провСряСт, являСтся Π»ΠΈ заданная квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° латинским ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ.

Латинский ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ – это квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ n x n, каТдая строка ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ столбСц ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТат всС числа ΠΎΡ‚ 1 Π΄ΠΎ n. Π’ Π‘Ρ€Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΠΊΠ° латинским ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°ΠΌ ΠΏΡ€ΠΈΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ магичСскиС свойства: Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ использовались Π²ΠΎ врСмя провСдСния ΠΎΠΊΠΊΡƒΠ»ΡŒΡ‚Π½Ρ‹Ρ… Ρ€ΠΈΡ‚ΡƒΠ°Π»ΠΎΠ². ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для опрСдСлСния латинского ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

  • число n – количСство строк ΠΈ столбцов Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅;
  • n строк, c n чисСл Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° вывСсти YES, Ссли ввСдСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° являСтся латинским ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ, ΠΈ NO Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ случаС.

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°:
4
2 3 4 1
3 4 1 2
4 1 2 3
1 2 3 4


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:
#YES

РСшСниС

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ– с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sorted():

n = int(input())
matrix = [[int(i) for i in input().split()] for _ in range(n)]
for i in range(n):
    if sorted(matrix[i]) != list(range(1, n + 1)) or sorted([matrix[j][i] for j in range(n)]) != list(range(1, n + 1)):
        print('NO')
        break
else:
    print('YES')

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ – с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ all():

n = int(input())
square = [[*map(int,input().split()) ] for i in range(n)]
a = all([all([c in row for c in range(1,n + 1)]) for row in square])
b = all([all([c in row1 for c in range(1, n + 1)]) for row1 in zip(*square)])

print(('NO','YES')[a and b])

Π’Ρ€Π΅Ρ‚ΠΈΠΉ способ – с использованиСм транспонирования ΠΈ мноТСств:

n = int(input())
sq_set = set(range(1, n + 1))
square = []
for i in range(n):
    square.append(list(map(int, input().split())))
tr_square = list(map(list, zip(*square)))
vector_1 = [set(row) == sq_set for row in square]
vector_2 = [set(row) == sq_set for row in tr_square]
vector = vector_1 + vector_2
if all(vector):
    print('YES')
else:
    print('NO')
***

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅




Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

natkaida
27 мая 2024

🀯 Как простая Π·Π°Π΄Π°Ρ‡ΠΊΠ° поставила Π² Ρ‚ΡƒΠΏΠΈΠΊ программистов (ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ Π²Ρ‹Π±Ρ€Π°Π»ΠΈΡΡŒ)

Π’ 2010 Π³ΠΎΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Stack Overflow Π½Π΅ справился с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π½Π° собСсСдов...
natkaida
12 января 2024

πŸ… РСшаСм 5 ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° Python

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску для Π²Ρ‹Π±ΠΎΡ€Π° симпатичных ΡƒΠ·ΠΎΡ€ΠΎΠ², Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ...
natkaida
25 сСнтября 2024

πŸ₯œπŸ”¨ ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΊΠ°ΠΊ Ρ‰Π΅Π»ΠΊΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ ΠΊΠ°ΠΊ ΠΎΡ€Π΅ΡˆΠΊΠΈ

Π“ΠΎΡ‚ΠΎΠ² ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… плавятся ΠΌΠΎΠ·Π³ΠΈ? Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ...