您的位置:首页 > 其它

UVA 1590 - IP Networks

2014-07-22 16:06 405 查看
这道题很简单,直接AC就可以了。

#include<iostream>

#include<cstring>

#include<cctype>

#include<cstdio>

#include<map>

#include<set>

#include<list>

#include<cstdlib>

#include<string>

#include<algorithm>

#include<vector>

#include<stack>

#include<queue>

#include<cmath>

using namespace std;

int main()

{

int n;

while(cin>>n)

{

int num
[4];

for(int i=0;i<n;i++) scanf("%d.%d.%d.%d",&num[i][0],&num[i][1],&num[i][2],&num[i][3]);

int flag[32];

memset(flag,0,sizeof(flag));

for(int k=1;k<n;k++)

for(int i=0;i<4;i++)

for(int j=7;j>=0;j--)

{

if(!((num[k][i]^num[0][i])&(1<<j))) flag[i*8+7-j]++;

}

int i;

for(i=0;i<32;i++) if(flag[i]<n-1) break;

int x=i/8,y=i%8,FLAG=0,yy=y;

if(i==32)

{

cout<<num[0][0]<<"."<<num[0][1]<<"."<<num[0][2]<<"."<<num[0][3]<<endl;

cout<<"255.255.255.255"<<endl;

continue;

}

for(int j=0;j<x;j++)

{

if(!FLAG) cout<<num[0][j],FLAG++;

else cout<<"."<<num[0][j];

}

int l=0;

for(int j=7;yy>0;yy--,j--) l+=(1<<j);

l=l&num[0][x];

if(!FLAG) cout<<l,FLAG++;

else cout<<"."<<l;

for(int j=x+1;j<4;j++)

{

if(!FLAG) cout<<'0',FLAG++;

else cout<<"."<<'0';

}

cout<<endl;

FLAG=0,l=0,yy=y;

for(int j=0;j<x;j++)

{

if(!FLAG) cout<<255,FLAG++;

else cout<<"."<<255;

}

for(int j=7;yy>0;yy--,j--) l+=(1<<j);

if(!FLAG) cout<<l,FLAG++;

else cout<<"."<<l;

for(int j=x+1;j<4;j++)

{

if(!FLAG) cout<<'0',FLAG++;

else cout<<"."<<'0';

}

cout<<endl;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: