给定n个三角形,我们需要找出给定三角形中有多少个唯一的三角形。对于每个三角形,我们给定三个整数a,b和c(三角形的边)。
如果没有其他具有相同边集的三角形,则认为三角形是唯一的。
样本输入:
1
样本输出:
34 5 32
15 20 6
4 2 3
5 6 9
15 20 6
34 5 32
说明:
每条线都是一个三角形,具有3个边。前两个三角形具有相同的边,因此它们是相同的(只是顺序不同)。即。两个三角形的边的总和相等。
第三个三角形“ 8 2 9”是唯一的,因为没有其他三角形具有完全相似的边。因此输出为1(唯一三角形的总数)
样本输入:
2
样本输出:
n = int(input())
arr = [list(map(int, input().split())) for x in range(n)]
def uniqueTriangle(arr):
row = len(arr)
col = len(arr[0])
mp = {}
hel = {}
for i in range(row):
tri = arr[i]
tri.sort()
strA = [str(x) for x in tri]
strB = ''
strB = strB.join(strA)
if strB not in mp.values():
mo[i] = strB
else:
hell[i] = strB
count = 0
for i in range(row):
if i in mp:
val = mp.get(i)
if val not in hel.values():
count = count + 1
print (count)
此处的三角形“ 423”和“ 560”是唯一的。因此输出为2(唯一三角形的总数)
这就是我所做的...
{{1}}
为丑陋的代码表示歉意。但是如何使这段代码更好呢?
答案 0 :(得分:1)
from collections import Counter
arr = [[7, 6, 5],[5, 7, 6],[8, 2, 9],[2, 3, 4],[2, 4, 3]]
def unique_triangles(arr):
counter = Counter([frozenset(a) for a in arr])
return len([res for res in counter if counter[res] == 1])
frozenset
标记每个唯一的三角形集collections.Counter
计算在输入数组中找到的唯一集的数量