ABC224、コンテスト6回目の挑戦です。
阪神が点が取れず引き分けだったのと同じく、私もC問題で最後WAを取り除けずに、落としました。。。
でも茶色(優勝)は諦めません。挑戦しつづけるのみ。諦めたらそこで試合終了。
S=input()
#erかistかを判定
if S[-2:]=='er':
print('er')
else:
print('ist')
必ずどっちかに判定されるので、istの方は節約した。
H, W= map(int, input().split())
# print(H, W)
#H行W列のマス目
matrix=[]
for i in range(H):
index_i=[]
index_i=list(map(int, input().split()))
matrix.append(index_i)
# print(matrix)
#条件の判定
#ありうるi1, i2の組み合わせ
list_i1_i2=[]
for i1 in range(1,H+1):
for i2 in range(1, H+1):
if i1 <i2:
list_i1_i2.append([i1, i2])
else:
pass
# print(list_i1_i2)
#ありうるj1, j2の組み合わせも同様に
list_j1_j2=[]
for j1 in range(1,W+1):
for j2 in range(1, W+1):
if j1 <j2:
list_j1_j2.append([j1, j2])
else:
pass
# print(list_j1_j2)
#i1, i2, j1, j2についてそれぞれ判定して結果を出力
flag='Yes' #判定のフラグ
for i in list_i1_i2:
i1=i[0]
i2=i[1]
for j in list_j1_j2:
j1=j[0]
j2=j[1]
#条件式の判定
#値指定が0始まりなので、-1
if matrix[i1-1][j1-1]+matrix[i2-1][j2-1]<=matrix[i2-1][j1-1]+matrix[i1-1][j2-1]:
pass
else:
flag='No'
break
print(flag)
速さもレートに反映されるとわかったので、ABはできるだけ速く解くことを意識して臨んだが、問題文がわかりにくく、オエっとなった。
ついにBも完答できない回が来たかと悟ったが、よく考えると、ただ判定すればいいだけだった。でもいろいろあって、時間はかかって、40分くらい。
N=int(input())
list_i=[]
for i in range(N):
XY=[]
XY=list(map(int, input().split()))
list_i.append(XY)
# print(list_i)
#三角形ができないときの条件は、角度がつかないこと。
#重複なしの3点を列挙
import itertools
total=0
all = itertools.combinations(list_i, 3)
for i in all:
i=list(i) #setから、listに変換
# print(i)
#直線上に3点が並ぶかを判定
X1=i[0][0]
Y1=i[0][1]
X2=i[1][0]
Y2=i[1][1]
X3=i[2][0]
Y3=i[2][1]
# print(X1, Y1, X2, Y2, X3, Y3)
if X1==X2==X3:#Y軸に平行な時、傾き無限大で直線上
continue #以下の処理を飛ばす
else:
if X1==X2:
total+=1
continue
else:
if Y3-Y1==(Y2-Y1)/(X2-X1)*(X3-X1):
continue #何もしない
else:
total+=1 #三角形が作れるので、数える。
print(total)
まず、itertoolsのcombinationsで、3点の組み合わせを求める。
三角形ができるときの条件は、3点が直線上にないことなので、点1, 点2を持ってきて、直線の式を作り、点3が直線上にあればカウントしないようにした。Y軸に平行なときは、傾きが∞になるので、if文でのぞいた。サンプルテストはどっちもOKだったので、投下。
pypy3で提出すると、AC16個、WA7個。(pythonは余裕のTLE)
どうやら、以下の部分に不備があるとアタリをつけるが、この時点で残り5分。いろいろ提出したが、時間切れ。悔しすぎる。。。
if X1==X2==X3:#Y軸に平行な時、傾き無限大で直線上
continue #以下の処理を飛ばす
else:
if X1==X2:
やってみると、上記の部分で、
Y3-Y1==(Y2-Y1)/(X2-X1)*(X3-X1)
の式が、同じになる条件の漏れがあった。
直線の式を変形して、if文で判定でよかった。
if (X2-X1)*(Y3-Y1)==(X3-X1)*(Y2-Y1):
continue #以下の処理を飛ばす
else:
total+=1 #三角形が作れるので、数える。
N=int(input())
list_i=[]
for i in range(N):
XY=[]
XY=list(map(int, input().split()))
list_i.append(XY)
# print(list_i)
#三角形ができないときの条件は、角度がつかないこと。
#重複なしの3点を列挙
import itertools
total=0
all = itertools.combinations(list_i, 3)
for i in all:
i=list(i) #setから、listに変換
# print(i)
#直線上に3点が並ぶかを判定
X1=i[0][0]
Y1=i[0][1]
X2=i[1][0]
Y2=i[1][1]
X3=i[2][0]
Y3=i[2][1]
# print(X1, Y1, X2, Y2, X3, Y3)
#正解
if (X2-X1)*(Y3-Y1)==(X3-X1)*(Y2-Y1):
continue #以下の処理を飛ばす
else:
total+=1 #三角形が作れるので、数える。
print(total)
上記のコードでコンテスト後だが、無事AC。
公式解説の解答例を見てみると、3点の座標から、面積を導き出して、0になるならないを判定していて非常にスマートだった。
悔しい敗戦となりました。この悔しさがあるからこそ、ACした時の喜びは一入なのです。。。
次また頑張ります。お疲れさまでした。