Takahashi's information
https://atcoder.jp/contests/abc088/tasks/abc088_c
制約がきつめ
まず、等式がどのようになるかを考える。
1. $ c_{1,1}=a_1 + b_1
2. $ c_{1,2}=a_1+b_2
3. $ c_{1,3}=a_1+b_3
4. $ c_{2,1}=a_2+b_1
5. $ c_{2,2}=a_2+b_2
6. $ c_{2,3}=a_2+b_3
7. $ c_{3,1}=a_3+b_1
8. $ c_{3,2}=a_3+b_2
9. $ c_{3,3}=a_3+b_3
んーと、
1と2より、
$ c_{1,1}-c_{1,2}=b_1-b_2
4と5より、
$ c_{2,1}-c_{2,2}=b_1-b_2
これで値が一致する式の組ができる。
したがって、2式が一致することが条件の一つとなる。
共通項があれば、引き去ることで式を得られる
a1とa2
互いに一致する3式
(1)-(4)
(2)-(5)
(3)-(6)
a2とa3
(4)-(7)
(5)-(8)
(6)-(9)
a1とa3
(1)-(7)
(2)-(8)
(3)-(9)
b1とb2
(1)-(2)
(4)-(5)
(7)-(8)
b2とb3
(2)-(3)
(5)-(6)
(8)-(9)
b3とb1
(1)-(3)
(4)-(6)
(7)-(9)
以上18式を計算する。
もっと抽象化できないか?
aについて
9つの等式を、bで一致するように並び替えると同じ形になる
b
9つの等式を、3つずつ組にして考える
$ c_{11},c_{21},c_{31}
これらは、2つ選んで取った差の3数がそれぞれ等しい
$ c_{12},c_{22},c_{32}
$ c_{13},c_{23},c_{33}
code:memo.py
import itertools
c1 = list(map(int, input().split()))
c2 = list(map(int, input().split()))
c3 = list(map(int, input().split()))
x = c1, c2, c3
y = [None*3]*3
for i in range(3):
for j in range(3):
yji = xij
# 転置行列
# aについて
# 3つから2つ選ぶ組み合わせはどう作る?
# リストの内容がすべて相等しいかを表すにはどうする?
def is_all_same(l):
if len(l) == 0:
return True
for el in l:
if el != l0:
return False
return True
def is_valid_matrix(m):
for row in m:
row_valid = is_all_same(sum(perm) for perm in itertools.permutation(row)]
if not row_valid:
return False
return True
x_valid = is_valid_matrix(x)
y_valid = is_valid_matrix(y)
なるほど、行列$ cにおいて、以下のことが言えればよいのか
同じ列の3値は互いに等しい
同じ行の3値は互いに等しい
え?
code: main.py
c = []
for _ in range(3):
row = list(map(int, input().split()))
c.append(row)
def is_same_column(l, index):
first = l0index
for row in l1::
cell = rowindex
if cell != first:
return False
return True
def is_same_row(l, index):
first = lindex0:
for cell in lindex1::
if cell != first:
return False
return True
def judge():
for i in range(3):
if not is_same_column(c, i):
return False
if not is_same_row(c, i):
return False
return True
print("Yes" if judge() else "No")
違うと思うが
どうしてこうなった...
3列について
2つの列を選ぶ
次に、その2つの列の要素の、行が同じものの差を取る
この差が等しくならなければNo
これは証明できる
AC.icon
https://atcoder.jp/contests/abc088/submissions/42230203
できたー
行列の処理をするAtCoder問題