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

使用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:171.068KBPYTHON正确100156ms8.824MB
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值