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++做保险