Auteur du problème: | Hasan Saleh (MathModel) |
Préparé par: | Hasan Saleh (MathModel) |
Édité par: | Hasan Saleh (MathModel) |
Solution
Calculez la somme de chaque grille et colonne en \mathcal{O}(n^2) et mappez-les avec une , puis pour chaque diagonale, vérifiez toutes les sommes de sous-tableaux de chaque diagonale et vérifiez si elles ont déjà été calculées dans . Cela peut être fait avec une somme préfixe ou simplement en mettant à jour les sommes et en les stockant lors du calcul.
def solve():
n=int(input())
a = [[0]*n for _ in range(n)]
mp={}
for i in range(n):
a[i]=list(map(int,input().split()))
for i in range(n):
sum,sum2=0,0
for j in range(n):
sum+=a[i][j]
sum2+=a[j][i]
mp[sum]=1
mp[sum2]=1
d1,d2=[],[]
sd1,sd2=0,0
for i in range(n):
sd1+=a[i][i]
sd2+=a[i][n-i-1]
d1+=[sd1]
d2+=[sd2]
for i in range(n):
for j in range(i,n):
try:
if(mp[d1[j]-d1[i]+a[i][i]]):
print("OUI")
return
except:
pass
try:
if(mp[d2[j]-d2[i]+a[i][n-i-1]]):
print("OUI")
return
except:
pass
print("NON")
for _ in range(int(input())):
solve()Complexité \mathcal{O}(n^2)