考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC133-B - Good Distance を解く

ABC133-B - Good Distance

 

D次元空間上に N個の点がある

i 番目の点と j 番目の点の距離が整数となるような組み合わせは

いくつあるかを求める( i < j )

 

2点間の距離を求める公式は与えられているのでそれを利用する

N の制約は 2 <= N <= 10 とかなり小さいので

組み合わせを全通り試せばいい

このとき、ダブルカウントしないように注意する必要がある

 

整数であることの確認については色んな方法があるが

今回は以下のようにキャストによる小数点以下の切り捨てと

等号演算子を利用して行う

 

# 整数の場合
>>> a=1.0
>>> b=int(a)
>>> 
>>> a==b
True

# 整数でない場合
>>> a=1.1
>>> b=int(a)
>>> 
>>> a==b
False

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

import math

# 入力
N,D=map(int,input().split())

l=[]
for i in range(N):
  l.append(list(map(int,input().split())))

c=0
for i in range(N):
  for j in range(i+1,N):

    # 距離の計算
    a=0
    for k in range(D):
      a+=pow(l[i][k]-l[j][k],2)

    a=math.sqrt(a)

    # 整数の判定
    b=int(a)
    if a==b:
      c+=1

# 出力
print(c)

 

提出結果はACでした