1 Star 0 Fork 0

LLL2343 / vJudge

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
1590.cpp 3.16 KB
一键复制 编辑 原始数据 按行查看 历史
lll2343 提交于 2022-03-06 23:34 . 230
#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;
}
1
https://gitee.com/lll2343/v-judge.git
git@gitee.com:lll2343/v-judge.git
lll2343
v-judge
vJudge
master

搜索帮助