代码拉取完成,页面将自动刷新
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
#include<bitset>
#include<math.h>
using namespace std;
void GetMinMax(int v1,int v2,int v3,int v4,int ips[][4]){
if( (v1<ips[0][0])
|| (v1==ips[0][0] && v2 < ips[0][1])
|| (v1==ips[0][0] && v2 == ips[0][1] && v3<ips[0][2])
|| (v1==ips[0][0] && v2 == ips[0][1] && v3==ips[0][2] && v4<ips[0][3])){
ips[0][0] = v1;
ips[0][1] = v2;
ips[0][2] = v3;
ips[0][3] = v4;
}
else if((v1>ips[1][0])
|| (v1==ips[1][0] && v2 > ips[1][1])
|| (v1==ips[1][0] && v2 == ips[1][1] && v3>ips[1][2])
|| (v1==ips[1][0] && v2 == ips[1][1] && v3==ips[1][2] && v4>ips[1][3])){
ips[1][0] = v1;
ips[1][1] = v2;
ips[1][2] = v3;
ips[1][3] = v4;
}
}
// 用来计算掩码可行
int GetPrifex(string s){
int ans = 0;
bool flag = true;
for(int i=0;i<s.size();i++){
if(s[i] == '0'){
flag = false;
break;
}
if(s[i]=='1' && flag){
ans += pow(2,s.size()-i-1);
}
}
return ans;
}
int GetAfter(string s){
bool flag = true;
int ans = 0;
for(int i=s.size()-1;i>=0;i--){
if(s[i] == '0' && flag){
flag = false;
}
if(s[i]=='1' && !flag){
ans += pow(2,s.size()-i-1);
}
}
return ans;
}
// IP掩码,此时应该最大IP地址和最小IP地址做同或 先做异或^ 再做同或
// 相同为1,不同为0,按位同或运算进行输出
void GetAnsFromArr(int ips[][4]){
string s1="",s2="";
bool flag = true,after = false;
for(int i=0;i<4;i++){
if(ips[0][i]!=ips[1][i]){
flag = false;
}
if(flag){
// 此时都还是相同的
s1 += to_string(bitset<8>(ips[0][i] & ips[1][i]).to_ulong());
s2 += to_string(bitset<8>(~(ips[0][i] ^ ips[1][i])).to_ulong());
} else if( !flag && !after) {
// 此时不同,则为0后面的都变成0
string v1 = bitset<8>(ips[0][i] & ips[1][i]).to_string();
string v2 = bitset<8>(~(ips[0][i] ^ ips[1][i])).to_string();
s1 += to_string(GetAfter(v1));
s2 += to_string(GetPrifex(v2));
after = true;
}
else if(after){
s1 += '0';
s2 += '0';
}
if(i < 3){
s1 += ".";
s2 += ".";
}
}
cout<<s1<<endl<<s2<<endl;
}
int main(){
// freopen("./out.txt", "w", stdout);
int ips[2][4] = {0};
int m;
while(cin>>m){
for(int i=0;i<m;i++){
int v1,v2,v3,v4;
scanf("%d.%d.%d.%d",&v1,&v2,&v3,&v4);
if(i == 0){
ips[0][0] = v1;
ips[0][1] = v2;
ips[0][2] = v3;
ips[0][3] = v4;
ips[1][0] = v1;
ips[1][1] = v2;
ips[1][2] = v3;
ips[1][3] = v4;
} else {
GetMinMax(v1,v2,v3,v4,ips);
}
}
GetAnsFromArr(ips);
}
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。