1 条题解
-
1
这个方法有些繁琐,不知有没有更简单的方法。
写完之后第一次递交,86 Wrong Answer,也就是6对1错,错误显示“Read 6, expect 2.”,发现我在fun()的最前面就判断了方法6的情况,而题目应该是优先判断靠前的方法。将判断方法6的两行挪到5与7之间再递交,100 Accepted。
解释一下这个方法,运用了Python当中的集合和复数,用几何巧妙地解决问题。
n = int(input()) m = int(n / 2) start = set() # 创建一个空集合 for i in range(n): s = input() if n % 2 == 0: # 调整n为偶数的情况 s = s[:m] + '-' + s[m:] if i < m: i -= 1 for j in range(len(s)): if s[j] == '@': # 将每一个@转化为一个复数,0是图案的正中心 start.add((n-i-1-m)*1j+j-m) # 向集合中添加元素 end = set() for i in range(n): e = input() if n % 2 == 0: e = e[:m] + '-' + e[m:] if i < m: i -= 1 for j in range(len(e)): if e[j] == '@': end.add((n-i-1-m)*1j+j-m) def right(lst): # 定义函数,获取顺时针旋转90度后的集合 l = set() for c in lst: l.add(c*-1j) return l def fun(): global start,end test = start.copy() for i in range(1,4): test = right(test) if test == end: return i mirror = set() for c in start: # 获取“反射”后的集合 mirror.add(-c.real + c.imag * 1j) if mirror == end: return 4 test = mirror.copy() for i in range(1,4): test = right(test) if test == end: return 5 if start == end: return 6 return 7 print(fun())
- 1
信息
- ID
- 693
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 26
- 已通过
- 3
- 上传者