UVA1590——IP Networks

while True:
    try:
        amount=int(input())
        if amount<=0:
            break;
        s1=s2=s3=s4=0
        s11=s22=s33=s44=0#standard
        sc=[255,255,255,255]
        for i in range(amount):
            ip=input()
            ip=ip.split('.')
            ip=[int(i) for i in ip]
            if i==0:
                s11,s22,s33,s44=ip
            else:
                t1,t2,t3,t4=ip
                t1,t2,t3,t4=~(t1^s11),~(t2^s22),~(t3^s33),~(t4^s44)
                sc=sc[0]&t1,sc[1]&t2,sc[2]&t3,sc[3]&t4
        flag=0
        sc=list(sc)
        for i in range(4):
            if flag==1:
                sc[i]=0
            elif sc[i]!=255:
                if sc[i]>=2**7:
                    flag=1
                    p=t=0
                    while sc[i]!=0:
                        t+=1
                        if sc[i]%2==0:
                            p=t
                        sc[i]=sc[i]//2
                    sc[i]=2**8-2**p
                else:
                    sc[i]=0
        IP=str(sc[0]&s11)+'.'+str(sc[1]&s22)+'.'+str(sc[2]&s33)+'.'\
            +str(sc[3]&s44)
        SONIP=str(sc[0])+'.'+str(sc[1])+'.'+str(sc[2])+'.'\
            +str(sc[3])
        print(IP)
        print(SONIP)
    except:
        break
    


这道题给我的教训有3:
1.请仔细考虑位运算真的能达到你想要的结果么
2.不要把时间浪费在语法错误上
3.mmp不要用python做acm题目,到时候debug都不知道怎么办。
我确信这题结果一定是对的,基本上对各种数据都能输出正确的结果,但是WA,估计是输入输出的问题,暂时无解。还是用c++做保险
 

猜你喜欢

转载自blog.csdn.net/ShadowFox_/article/details/81178869