原题链接:CCF-CSP 201812-3 CIDR合并
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
#define ll long long
struct node
{
int a3,a2,a1,a0;
int len;
}ip[N];
bool cmp(node a,node b)
{
if(a.a3!=b.a3) return a.a3<b.a3;
else if(a.a2!=b.a2) return a.a2<b.a2;
else if(a.a1!=b.a1) return a.a1<b.a1;
else if(a.a0!=b.a0) return a.a0<b.a0;
else return a.len<b.len;
}
vector<int> change(string s)
{
int pos=0,f=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='/')
{
f=1;
pos=i;
}
}
int l=0;
if(f)
{
string tmp=s.substr(pos+1);
l=atoi(tmp.c_str());
s=s.substr(0,pos);
}
vector<int> v;
stringstream ss(s);
string tmp;
while(getline(ss,tmp,'.'))
{
int num=atoi(tmp.c_str());
v.push_back(num);
}
int len=4-v.size();
int l_tmp=len;
while(l_tmp--)
{
v.push_back(0);
}
if(f) v.push_back(l);
else v.push_back(32-8*len);
return v;
}
string out(vector<int> v)
{
string s;
string tmp;
stringstream ss;
ss<<v[0];
ss>>tmp;
s+=tmp;
s+='.';
string t1;
stringstream s1;
s1<<v[1];
s1>>t1;
s+=t1;
s+='.';
string t2;
stringstream s2;
s2<<v[2];
s2>>t2;
s+=t2;
s+='.';
string t3;
stringstream s3;
s3<<v[3];
s3>>t3;
s+=t3;
s+='/';
string t4;
stringstream s4;
s4<<v[4];
s4>>t4;
s+=t4;
return s;
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll n;
cin>>n;
for(int i=0;i<n;i++)
{
string s;
cin>>s;
vector<int> v=change(s);
ip[i].a3=v[0];
ip[i].a2=v[1];
ip[i].a1=v[2];
ip[i].a0=v[3];
ip[i].len=v[4];
}
sort(ip,ip+n,cmp);//排序
for(int i=0;i<n;i++)
{
vector<int> v;
v.push_back(ip[i].a3);
v.push_back(ip[i].a2);
v.push_back(ip[i].a1);
v.push_back(ip[i].a0);
v.push_back(ip[i].len);
string s=out(v);
cout<<s<<endl;
}
return 0;
}