CCF-CSP 202206-2 寻宝!大冒险!

        先是空间换时间,但是后百分之三十数据使用空间过大,运行错误。

        舍弃大量空间,判断点是否在tree(树)数组中,来判断是否相等,(x,y)in tree,太慢了,空间小了,但是时间超时。

        最后将tree数组变为tree字典,解决时间超时。

python 70分 (生成地图数组太大另外百分之三十不通过)

n, L, S = list(map(int, input().split(" ")))
tree = [list(map(int, input().split(" "))) for i in range(n)]
arr = [list(map(int, input().split(" "))) for j in range(S + 1)]
#交换数组
arr=arr[::-1]
#建立地图01矩阵
area = [[0] * (L + 1) for i in range(L + 1)]
for i in tree:
    area[i[0]][i[1]] = 1
#比较AB
sums = 0
S2 = (S + 1) * (S + 1)
for k in tree:
    flag = 1
    nums = 0
    for i in range(S + 1):
        if i + k[0] > L:
            break
        for j in range(S + 1):
            if j + k[1] > L:
                break
            if arr[i][j] == area[i + k[0]][j + k[1]]:
                nums += 1
            else:
                flag = 0
                break
        if not flag:
            break
    if nums == S2:
        sums += 1
print(sums)

python 70分 (tree数组定位,时间超时)

n, L, S = list(map(int, input().split(" ")))
tree = [list(map(int, input().split(" "))) for i in range(n)]
arr = [list(map(int, input().split(" "))) for j in range(S + 1)]
# 交换数组
arr=arr[::-1]
# 建立地图01矩阵
# area = [[0] * (L + 1) for i in range(L + 1)]
# for i in tree:
#     area[i[0]][i[1]] = 1
# 比较AB
sums = 0
S2 = (S + 1) * (S + 1)
for k in tree:
    flag = 1
    nums = 0
    for i in range(S + 1):
        for j in range(S + 1):
            s=[i+k[0],j+k[1]] in tree
            if arr[i][j] ==1 and s:
                nums += 1
            elif arr[i][j] ==0 and (not s) and i+k[0]<=L and j+k[1]<=L:
                nums += 1
            else:
                flag = 0
                break
        if not flag:
            break
    if nums == S2:
        sums += 1
print(sums)

python 100分 (字典定位)

n, L, S = list(map(int, input().split(" ")))
tree = [list(map(int, input().split(" "))) for i in range(n)]
arr = [list(map(int, input().split(" "))) for j in range(S + 1)]
xy={}
for i in tree:
    xy[(i[0],i[1])]=1
# 交换数组
arr=arr[::-1]
# 建立地图01矩阵
# area = [[0] * (L + 1) for i in range(L + 1)]
# for i in tree:
#     area[i[0]][i[1]] = 1
# 比较AB
sums = 0
S2 = (S + 1) * (S + 1)
for k in tree:
    flag = 1
    nums = 0
    for i in range(S + 1):
        for j in range(S + 1):
            s=(i+k[0],j+k[1]) in xy
            if arr[i][j] ==1 and s:
                nums += 1
            elif arr[i][j] ==0 and (not s) and i+k[0]<=L and j+k[1]<=L:
                nums += 1
            else:
                flag = 0
                break
        if not flag:
            break
    if nums == S2:
        sums += 1
print(sums)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值