CCF CSP 201912-2 回收站选址 垃圾站选址 【Python版】

CCF CSP 2019-2 回收站选址 垃圾站选址 

一、题目

[题目背景]
开学了,可是校园里堆积了不少垃圾杂物。
热心的同学们纷纷自发前来清理,为学校注入正能量~
[题目描述]
通过无人机航拍我们已经知晓了n处尚待清理的垃圾位置,其中第i (1≤i≤n)
处的坐标为(x, y;),保证所有的坐标均为整数。
我们希望在垃圾集中的地方建立些回收站。具体来说,对于-一个位置(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个坐标互不相同。

二、分析

这道题很有意思,如果用C/C++来解题,可能会有很多精彩的解法。

本打算用字典解决,但解题过程中发现Node上储存的数据比较简单,只是  “有”  或  “没有” 垃圾   的 Bool 型,直接将Bool型过滤掉,可以直接用list解决。

 

三、代码

如同前篇,仓促之作,应该有更好的代码,欢迎交流指正~

n=int(input())
trashDict=[]
listKeys=[]
listScoreCount=[0,0,0,0,0]

def toStr(x,y):
    return str(x)+' '+str(y)

def toFind(x,y):
    return toStr(x+1,y) in trashDict and\
           toStr(x-1,y) in trashDict and\
           toStr(x,y+1) in trashDict and\
           toStr(x,y-1) in trashDict

def getScore(x,y):
        score=0;
        if toStr(x+1,y+1) in trashDict:
            score+=1
        if toStr(x+1,y-1) in trashDict:
            score+=1
        if toStr(x-1,y+1) in trashDict:
            score+=1
        if toStr(x-1,y-1) in trashDict:
            score+=1
        listScoreCount[score]+=1

for i in range(n):
    temp_a,temp_b=map(int,input().split(' '))
    listKeys.append(temp_a)
    listKeys.append(temp_b)
    trashDict.append(toStr(temp_a,temp_b))

for j in range(0,2*n,2):
    x,y=listKeys[j],listKeys[j+1]
    if toFind(x,y):
        getScore(x,y)

print(*listScoreCount,sep='\n')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值