CSP201912-2 回收站选址 (Python)

文章目录

题目

试题编号:201912-2
试题名称:回收站选址
时间限制:1.0s
内存限制:512.0MB

题目背景
  开学了,可是校园里堆积了不少垃圾杂物。
  热心的同学们纷纷自发前来清理,为学校注入正能量~

题目描述
  通过无人机航拍我们已经知晓了 n 处尚待清理的垃圾位置,其中第 i(1 ≤ i ≤ n)处的坐标为(xi,yi),保证所有的坐标均为整数。
  我们希望在垃圾集中的地方建立些回收站。具体来说,对于一个位置(x,y)是否适合建立回收站,我们主要考虑以下几点∶
  ● (x,y)必须是整数坐标,且该处存在垃圾;
  ● 上下左右四个邻居位置,即(x,y + 1)、(x,y - 1)、(x + 1,y)和(x - 1,y)处,必须全部存在垃圾;
  ● 进一步地,我们会对满足上述两个条件的选址进行评分,分数为不大于 4 的自然数,表示在(x±1,y±1)四个对角位置中有几处存在垃圾。
  现在,请你统计一下每种得分的选址个数。

输入格式
  从标准输入读入数据。
  输入总共有 n+1 行。
  第 1 行包含一个正整数 n,表示已查明的垃圾点个数。
  第 1 + i 行(1 ≤ i ≤ n)包含由一个空格分隔的两个整数 x 和 y,表示第 i 处垃圾的坐标。
  保证输入的 n 个坐标互不相同。

输出格式
  输出到标准输出。
  输出共五行,每行一个整数,依次表示得分为 0、1、2、3 和 4 的回收站选址个数。

样例1 输入
  7
  1 2
  2 1
  0 0
  1 1
  1 0
  2 0
  0 1

样例1 输出
  0
  0
  1
  0
  0

样例1 解释
在这里插入图片描述
  如图所示,仅有 (1,1) 可选为回收站地址,评分为2。

样例2 输入
  2
  0 0
  -100000 10

样例2 输出
  0
  0
  0
  0
  0

样例2 解释
  不存在可选地址。

样例3 输入
  11
  9 10
  10 10
  11 10
  12 10
  13 10
  11 9
  11 8
  12 9
  10 9
  10 11
  12 11

样例3 输出
  0
  2
  1
  0
  0

样例3 解释
  1 分选址∶ (10,10) 和 (12,10);
  2 分选址∶ (11,9)。

子任务
  ● 测试点 1 和 2,保证对于任意的 i 皆满足 0 ≤ xi,yi ≤ 2;
  ● 测试点 3、4 和 5,保证对于任意的i皆满足0 ≤ xi,yi ≤ 500;
  ● 测试点 6、7 和 8,保证对于任意的i皆满足0 ≤ xi,yi ≤ 109;
  ● 测试点 9 和 10,保证对于任意的i皆满足|xi|,|yi| ≤ 109,即坐标可以是负数。
  所有的测试点保证 1 ≤ n ≤ 103

程序代码

# 输入垃圾点的个数
n = int(input())

# 垃圾点坐标列表
points = []

# 得分0-4列表初始化
output = [0,0,0,0,0]

# 循环输入垃圾点坐标
for i in range(n):
    points.append(list(map(int,input().split())))

# 遍历所有垃圾点
for point in points:
    x,y = point
    # 判断是否符合垃圾站的条件
    if [x-1,y] in points and [x+1,y] in points and [x,y-1] in points and [x,y+1] in points:
        # 计算得分
        grade = 0
        if [x+1,y-1] in points:
            grade += 1
        if [x+1,y+1] in points:
            grade += 1
        if [x-1,y-1] in points:
            grade += 1
        if [x-1,y+1] in points:
            grade += 1
        # 得分数组相应分数位置自增
        output[grade] += 1

# 使出得分列表
for i in range(5):
    print(output[i])
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anera01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值