CCF第三题:RAID5

CCF第三题(python):RAID5


在这里插入图片描述 在这里插入图片描述

nsl = input().split()

for i in range(3):
    nsl[i] = eval(nsl[i])

s = [0] * 1001
ji = []

for i in range(nsl[2]):
    s1 = input().split()

    # s2 = s1[1]
    ji.append(s1[0])
    # s3 = [s2[i:i + 8] for i in range(0, len(s2), 8)]

    s[eval(s1[0])] = s1[1]

n = eval(input())

for i in range(n):
    d = eval(input())
    n1 = nsl[0]

    k = d // nsl[1]  # 条带

    h = k // (n1 - 1)  # 行

    p = abs((n1 - h - 1) % n1)  # p位置

    k1 = d % nsl[1]  # 条带

    if d > (nsl[0] - 1) * len(s[eval(ji[0])]) / 8 - 1:
        print('-')
    else:

        w = ((d - h * nsl[1] * (nsl[0] - 1)) // nsl[1] + p + 1) % nsl[0]

        w1 = d % nsl[1] + h * nsl[1]

        if s[w] == 0:
            z = int('0x' + s[eval(ji[0])][w1 * 8:w1 * 8 + 8], 16)

            for i1 in range(1, len(ji)):
                z = z ^ int('0x' + s[eval(ji[i1])][w1 * 8:w1 * 8 + 8], 16)
                x = ('%#x' % z)
            print(x[2:].upper())

        elif s[w] != 0:
            print(s[w][w1 * 8:w1 * 8 + 8])
        else:
            print('-')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值