#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int COMPARE(int a,int b,char str1[8],char str2[8]);
int CALCULATE_1(char str1[],char str2[]);
int CALCULATE_2(char str1[],char str2[],int sum1,int max);
int TO_END(int sum,int i,int max);
void OUTPUT_1(int a,int b);
void OUTPUT_2(int a,int b1,int b2);
void OUTPUT_3(int a,int b,int c1,int c2);
void OUTPUT_4(int a,int b,int c,int d1,int d2);
struct IP
{
int x1,x2,x3,x4;
};
int main()
{
struct IP min,max,temp;
int i,N;
while(scanf("%d",&N)!=EOF)
{
for(i=1;i<=N;i++)
{
if(i==1)
{
scanf("%d.%d.%d.%d",&temp.x1,&temp.x2,&temp.x3,&temp.x4);
min = temp;max = temp;
}
else
{
scanf("%d.%d.%d.%d",&temp.x1,&temp.x2,&temp.x3,&temp.x4);
if(temp.x1<min.x1)min = temp;
if(temp.x1==min.x1&&temp.x2<min.x2)min = temp;
if(temp.x1==min.x1&&temp.x2==min.x2&&temp.x3<min.x3)min = temp;
if(temp.x1==min.x1&&temp.x2==min.x2&&temp.x3==min.x3&&temp.x4<min.x4)min = temp;
if(temp.x1>max.x1)max = temp;
if(temp.x1==max.x1&&temp.x2>max.x2)max = temp;
if(temp.x1==max.x1&&temp.x2==max.x2&&temp.x3>max.x3)max = temp;
if(temp.x1==max.x1&&temp.x2==max.x2&&temp.x3==max.x3&&temp.x4>max.x4)max = temp;
}
}
if(min.x1!=max.x1)OUTPUT_1(min.x1,max.x1);
else if(min.x1==max.x1&&min.x2!=max.x2)OUTPUT_2(min.x1,min.x2,max.x2);
else if(min.x1==max.x1&&min.x2==max.x2&&min.x3!=max.x3)OUTPUT_3(min.x1,min.x2,min.x3,max.x3);
else if(min.x1==max.x1&&min.x2==max.x2&&min.x3==max.x3&&min.x4!=max.x4)OUTPUT_4(min.x1,min.x2,min.x3,min.x4,max.x4);
else {
printf("%d.%d.%d.%d\n",min.x1,min.x2,min.x3,min.x4);
printf("255.255.255.255\n");
}
}
return 0;
}
int COMPARE(int a,int b,char str1[],char str2[])
{
memset(str1,0,sizeof(str1));memset(str2,0,sizeof(str2));
int i,x,sum=0;
for(i=0;i<=7;i++)
{
x = (int)pow(2,7-i);
if(sum+x<=a)
{
sum+=x;str1[i]='1';
}
else str1[i] = '0';
}
sum = 0;
for(i=0;i<=7;i++)
{
x = (int)pow(2,7-i);
if(sum+x<=b)
{
sum+=x;str2[i] = '1';
}
else str2[i] = '0';
}
}
void OUTPUT_1(int min_x1,int max_x1)
{
int sum1 = 0,sum2 = 0;
char str1[8],str2[8];
COMPARE(min_x1,max_x1,str1,str2);
sum1 = CALCULATE_1(str1,str2);
sum2 = CALCULATE_2(str1,str2,sum1,max_x1);
printf("%d.0.0.0\n",sum1);
printf("%d.0.0.0\n",sum2);
}
void OUTPUT_2(int min_x1,int min_x2,int max_x2)
{
int sum1 = 0,sum2 = 0;
char str1[8],str2[8];
COMPARE(min_x2,max_x2,str1,str2);
sum1 = CALCULATE_1(str1,str2);
sum2 = CALCULATE_2(str1,str2,sum1,max_x2);
printf("%d.%d.0.0\n",min_x1,sum1);
printf("255.%d.0.0\n",sum2);
}
void OUTPUT_3(int min_x1,int min_x2,int min_x3,int max_x3)
{
int sum1 = 0,sum2 = 0;
char str1[8],str2[8];
COMPARE(min_x3,max_x3,str1,str2);
sum1 = CALCULATE_1(str1,str2);
sum2 = CALCULATE_2(str1,str2,sum1,max_x3);
printf("%d.%d.%d.0\n",min_x1,min_x2,sum1);
printf("255.255.%d.0\n",sum2);
}
void OUTPUT_4(int min_x1,int min_x2,int min_x3,int min_x4,int max_x4)
{
int sum1 = 0,sum2 = 0;
char str1[8],str2[8];
COMPARE(min_x4,max_x4,str1,str2);
sum1 = CALCULATE_1(str1,str2);
sum2 = CALCULATE_2(str1,str2,sum1,max_x4);
printf("%d.%d.%d.%d\n",min_x1,min_x2,min_x3,sum1);
printf("255.255.255.%d\n",sum2);
}
int CALCULATE_1(char str1[],char str2[])
{
int i,sum = 0;
for(i=0;i<=7;i++)
{
if(str1[i]==str2[i]&&str1[i]=='1')sum = pow(2,7-i) + sum;
if(str1[i] != str2[i])return sum;
}
}
int CALCULATE_2(char str1[],char str2[],int sum1,int max)
{
int i,sum = 0;
for(i=0;i<=7;i++)
{
if(str1[i]==str2[i])sum = (int)pow(2,7-i) + sum;
if(str1[i] != str2[i])
{
if(TO_END(sum1,i,max))return (sum +(int)pow(2,7-i));
return sum;
}
}
return sum;
}
int TO_END(int sum,int i,int max)
{
while(++i<=8) sum = (int)pow(2,7-i) + sum;
if(sum<max)return 0;
return 1;
}
uva1590
最新推荐文章于 2022-08-06 21:31:15 发布