UVA 1590

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void* a, const void *b)
{
    return *(int *)a - *(int *)b;
}
int ip[2000][2000] = { 0}, IP[4],A[4];
int ta[9] = {255, 254, 252, 248, 240, 224, 192, 128, 0};
int main()
{

    int n;

    while(scanf("%d", &n)!=EOF)
    {
        int i ;
        for(i = 0; i < n; i++)
            scanf("%d.%d.%d.%d", &ip[0][i],&ip[1][i], &ip[2][i],&ip[3][i]);
        for(i = 0; i < 4; i++)
        {
            qsort(ip[i],n,sizeof(ip[i][0]),cmp);
            int w, q;
            w = ip[i][n - 1];
            q = ip[i][0];
            int decide = 0,p = 0;
            int j;
            for(j = 1; j <= 8; j++)
            {
                if(q%2!=w%2)
                {
                    p = j;
                }
                q /=2;
                w /=2;
            }

            A[i] = ta[p];
            IP[i] = A[i] & ip[i][0];
            if(A[i]!=255)
                break;


        }
        for(i = i + 1; i < 4; i++)
        {
            A[i] = 0;
            IP[i] = 0;
        }
        printf("%d.%d.%d.%d\n",IP[0],IP[1],IP[2],IP[3]);
        printf("%d.%d.%d.%d\n",A[0],A[1],A[2],A[3]);
        memset(ip,0,sizeof(ip));
        memset(IP,0,sizeof(IP));
        memset(A,0,sizeof(A));
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值