文章

1

粉丝

72

获赞

1

访问

1.1k

头像
IP地址方案数 题解:
P1897 天津大学2019年机试
发布于2023年6月25日 20:45
阅读数 1.1k

递归,每次计算addr地址中能分隔出num段地址的数目。python代码供参考:

自己造的数据是都没有问题,请大佬批评指正。

#encoding:utf-8

def calc(addr, num):

    # 计算addr地址中能分隔出num段地址的数目(也是递归结束条件)
    if len(addr) > 3*num or len(addr) < num or num<1:
        return 0
        
    
    # 尝试前三位
    ret = 0
    if num==1:
        if len(addr) == len(str(int(addr))) and int(addr) >=0 and int(addr) <= 255:
            return 1

    for i in range(1, min(3+1, len(addr)+1)):
        nowBlock = addr[:i]
        # 检查是否0打头
        if len(nowBlock) != len(str(int(nowBlock))):
            continue
        # 检查数值范围
        if not(int(nowBlock) >=0 and int(nowBlock) <= 255):
            continue

        # 递归
        lastBlock = addr[i:]
        tmp_ret = calc(lastBlock, num-1)
        # 确保后面符合要求,这前边的1才能加上
        if tmp_ret > 0:
            ret += tmp_ret
    
    return ret


if __name__ == "__main__":
    n = int(input())
    for i in range(n):
        addr = str(input())
       ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发