虽然代码很丑,但是我能AC。。。。
#include<stdio.h>
#include<string.h>int a[1200][50];
int b[1200][50];
void get_bits(int m){
int i,j;
memset(b,0,sizeof(b));
for(i=0;i<m;i++){
int n,q=0,w=0,e=0,r=0;
q=a[i][0];
w=a[i][1];
e=a[i][2];
r=a[i][3];
int p=8;
while(q){
b[i][p--]=q%2;
q=q/2;
}
p=8;
while(w){
b[i][8+p--]=w%2;
w=w/2;
}
p=8;
while(e){
b[i][16+p--]=e%2;
e=e/2;
}
p=8;
while(r){
b[i][24+p--]=r%2;
r=r/2;
}
}
}
int main()
{
int m,n,i,j,k;
while(scanf("%d",&m)!=EOF)
{
for(i=0;i<m;i++)
scanf("%d.%d.%d.%d",&a[i][0],&a[i][1],&a[i][2],&a[i][3]);
get_bits(m);
int kase=32,ans=0;
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
for(n=1;n<=32;n++)
if(b[i][n]!=b[j][n]){
if(n<kase)
kase=n;
ans=1;
break;
}
if(kase==32&&ans!=1)
kase=33;
int u[50];
int v[50];
for(i=1;i<=32;i++){
if(i<kase){
v[i]=1;
u[i]=b[0][i];
}
else{
v[i]=0;
u[i]=0;
}
}
int c;
c=0;
for(i=1;i<=8;i++)
c=c*2+u[i];
printf("%d.",c);
c=0;
for(i=9;i<=16;i++)
c=c*2+u[i];
printf("%d.",c);
c=0;
for(i=17;i<=24;i++)
c=c*2+u[i];
printf("%d.",c);
c=0;
for(i=25;i<=32;i++)
c=c*2+u[i];
printf("%d\n",c);
c=0;
for(i=1;i<=8;i++)
c=c*2+v[i];
printf("%d.",c);
c=0;
for(i=9;i<=16;i++)
c=c*2+v[i];
printf("%d.",c);
c=0;
for(i=17;i<=24;i++)
c=c*2+v[i];
printf("%d.",c);
c=0;
for(i=25;i<=32;i++)
c=c*2+v[i];
printf("%d\n",c);
}
return 0;
}