使用python 解ccf-csp 2019-12-2回收站选址

使用python 解ccf-csp 2019-12-2回收站选址

传送

问题描述

使用python 解ccf-csp 2019-12-2回收站选址_第1张图片

问题分析

这个题目因为我们用的是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

你可能感兴趣的:(python,ccf-csp,python,算法)