0
点赞
收藏
分享

微信扫一扫

CCF-CSP 201812-3 CIDR合并 60

静悠 2022-05-03 阅读 106

原题链接: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;
}

举报

相关推荐

0 条评论