使用python 解ccf-csp 2019-12-2回收站选址
问题描述
问题分析
这个题目因为我们用的是Python就不用考虑数组大小问题了,只需要按要求一点一点判断是有满足要求就可以了,没有什么难点,只要不搞混上下左右和四个对角就可以了。看代码:
代码
# 垃圾点个数
n = int(input())
# Xi和Yi的数组
num = []
for i in range(n):
num.append(input().split())
# 用于存上下左右有垃圾的点
count = []
# 判断某个位置周围是否存在垃圾
def Xx(xy):
'''
:param xy:格式是[],表示某个点的坐标
:return: 是否有垃圾
'''
xy0 = xy
try:
num.index(xy0)
return True
except:
return False
# 判断上下左右是有垃圾
# 第二个条件
def Index(x, y):
xy0 = [str(x - 1), str(y)]
xy1 = [str(x + 1), str(y)]
xy2 = [str(x), str(y + 1)]
xy3 = [str(x), str(y - 1)]
try:
num.index(xy0)
num.index(xy1)
num.index(xy2)
num.index(xy3)
return True
except:
return False
# 四个对角位置的得分
# 第三个条件
def In(x, y):
# 某个点的起始分数
f = 0
# 对角个点坐标
xy0 = [str(x - 1), str(y - 1)]
xy1 = [str(x + 1), str(y + 1)]
xy2 = [str(x + 1), str(y - 1)]
xy3 = [str(x - 1), str(y + 1)]
# 判断是否垃圾,有就加分
if Xx(xy0) == True:
f += 1
if Xx(xy1) == True:
f += 1
if Xx(xy2) == True:
f += 1
if Xx(xy3) == True:
f += 1
return f
# 上下左右有垃圾的点
for i in range(n):
x = int(num[i][0])
y = int(num[i][1])
# 有垃圾就存
if Index(x, y) == True:
count.append(num[i])
# 用于输出,起始都是0分
out = [[0], [0], [0], [0], [0]]
# 计算各个点的分数
for i in range(int(len(count))):
x = int(count[i][0])
y = int(count[i][1])
fen = In(x, y)
out[fen][0] += 1
# 输出
for i in out:
print(i[0])
学渣一枚轻喷
最后得分
提交清单
提交编号 | 试题名称 | 提交时间 | 代码长度 | 编程语言 | 评测结果 | 得分 | 时间使用 | 空间使用 |
---|---|---|---|---|---|---|---|---|
1888261 | 回收站选址 | 05-26 21:17 | 1.068KB | PYTHON | 正确 | 100 | 156ms | 8.824MB |