yuya競プロ精進

主に競プロに関して。たまに機械学習。

Google Code Jam Crazy Rows (Python)

 行列を隣り合った行の入れ替えによって下三角行列に変形する問題

あらかじめ 各行の最後に1が出る場所を記録しておくことで,

O(n^2)に抑えることができる.

 

Pythonで書いてみた.

たぶんコードは合ってるはずなんじゃが,間違ってたら教えておくれやす.

 

n = int(input())
m = [map(int, input().split()) for _ in range(n)]

res = 0

a = [0]*n

for i in range(n):
 a[i] = -1
 for j in range(n):
  if m[i][j] == 1:
   a[i] = j

 

for i in range(n):
 pos = -1
 for j in range(i, n):
  if a[j] <= i:
   pos = j
   break

 for j in range(pos, i, -1):
  a[j], a[j-1] = a[j-1], a[j]
  res += 1

 

print(res)