按题意模拟即可。。。主要CCF吞代码。。。

#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ls (x<<1)
#define rs (x<<1|1)
#define ll long long
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Forr(i,a,b) for(int i=a;i>=b;i--)
#define Fr(i,a,b) for(int i=a;i<b;i++)
#define Frr(i,a,b) for(int i=a;i>b;i--)
#define pll pair<ll,ll>
using namespace std;
const int maxn=1e6+100;
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct node
{
int s[5];
friend bool operator<(node a,node b)
{
if(a.s[0]!=b.s[0])return a.s[0]<b.s[0];
if(a.s[1]!=b.s[1])return a.s[1]<b.s[1];
if(a.s[2]!=b.s[2])return a.s[2]<b.s[2];
if(a.s[3]!=b.s[3])return a.s[3]<b.s[3];
return a.s[4]>b.s[4];
}
}no[maxn];
int n,m;
string str;
int p[10],q[10];
int cnt1,cnt2;
int cal(int l,int r)
{
int ans=0;
int sr=1;
for(int i=r;i>=l;i--)
{
ans+=(str[i]-'0')*sr;
sr*=10;
}
return ans;
}
void init()
{
cin>>n;getchar();
for(int i=1;i<=n;i++)
{
cin>>str;
int len=str.length();
cnt1=cnt2=0;
for(int j=0;j<len;j++)
{
if(str[j]=='.')p[++cnt1]=j;
if(str[j]=='/')q[++cnt2]=j;
}
int las=0;
if(!cnt1)
{
if(!cnt2)
{
no[i].s[0]=cal(0,len-1);
no[i].s[4]=8;
}
else
{
no[i].s[0]=cal(0,q[1]-1);
no[i].s[4]=cal(q[1]+1,len-1);
}
}
else
{
for(int j=1;j<=cnt1;j++)
{
int pl=p[j];
no[i].s[j-1]=cal(las,pl-1);
las=pl+1;
}
if(cnt2)
{
no[i].s[cnt1]=cal(las,q[cnt2]-1);
no[i].s[4]=cal(q[cnt2]+1,len-1);
}
else
{
no[i].s[cnt1]=cal(las,len-1);
no[i].s[4]=(cnt1+1)*8;
}
}
} }
int nxt[maxn];
pair<ll,ll> cal1(node aa)
{
ll tmp=0;
ll st=1;
for(int i=3;i>=0;i--)
{
tmp+=aa.s[i]*st;
st*=256;
}
ll minn=(tmp/(1ll<<(32-aa.s[4])))*(1ll<<(32-aa.s[4]));
ll maxx=minn+(1ll<<(32-aa.s[4]))-1;
return mp(minn,maxx);
}
void solve1()
{
sort(&no[1],&no[n+1]);
for(int i=1;i<=n;i++)
{
nxt[i]=i+1;
}
for(int i=1;i<=n;i=nxt[i])
{
int tt=nxt[i];
if(tt>n)break;
while(1)
{
if(tt>n)break;
pll a1=cal1(no[i]),a2=cal1(no[tt]);
if(a1.fi>=a2.fi&&a2.se>=a1.se)
{
no[i]=no[tt];
nxt[i]=nxt[tt];
tt=nxt[tt];
}
else if(a1.fi<=a2.fi&&a2.se<=a1.se)
{
nxt[i]=nxt[tt];
tt=nxt[tt];
}
else
{
break;
}
}
}
}
int pr[maxn];
void solve2()
{
int pre=0;
for(int i=1;i<=n;i=nxt[i])
{
int tt=nxt[i];
int pre1=pre;
int j=i;
pr[i]=pre;
if(tt>n)break;
while(1)
{
tt=nxt[i];if(tt>n)break;
int flg=0;
if(no[i].s[4]==no[tt].s[4])
{
node ne=no[i];
if(no[i].s[4])
ne.s[4]=no[i].s[4]-1;
pll v1=cal1(ne);
pll v2=cal1(no[i]),v3=cal1(no[tt]);
if(v1.se-v1.fi==v3.se-v2.fi&&v2.fi==v1.fi&&v3.se==v1.se&&v2.se+1==v3.fi)
{
flg=1;
no[i]=ne;
nxt[i]=nxt[tt];
}
if(flg&&pre)
{
i=pr[i];
pre=pr[i];
}
if(!flg)
{
break;
}
}
else
{
break;
}
}
pre=i;
}
}
void print()
{
for(int i=1;i<=n;i=nxt[i])
{
for(int j=0;j<=4;j++)
{
cout<<no[i].s[j];
if(j<3)cout<<".";
if(j==3)cout<<"/";
}cout<<"\n";
}
}
int main()
{
init();
solve1();
solve2();
print();
}

  

CCF201812-3 CIDR合并的更多相关文章

  1. CCF 201812-3 CIDR合并

    CCF 201812-3 CIDR合并 //100分 93ms #include<stdio.h>//CCF上stdio.h比cstdio快!!! #include<string.h ...

  2. CIDR合并

    code #include <iostream> #include <list> #include <sstream> #include <vector> ...

  3. CCF-CSP题解 201812-3 CIDR合并

    题目想求与给定前缀列表等价的包含IP前缀数目最少的前缀列表. 首先是怎么存储前缀列表.用一个long long存储IP地址,再存一个前缀长度,封装在一个结构体里\(<ipNum, len> ...

  4. CCF-CSP认证 C++题解目录

    持续更新中,记录刷题过程并分享一下小小的心得总结. 试题编号 试题名称 标签 202006-1 线性分类器 | 题解 线性规划 202006-2 稀疏向量| 题解 归并排序思想 202006-3 化学 ...

  5. CIDR

    CIDR的介绍: CIDR(Classless Inter-Domain Routing,无类域间路由选择)它消除了传统的A类.B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空 ...

  6. 无分类编址(CIDR)构成超网

    CIDR(无分类域间路由选择) CIDR最主要有两个以下特点: 消除传统的A,B,C地址和划分子网的概念,更有效的分配IPv4的地址空间,CIDR使IP地址又回到无分类的两级编码.记法:IP地址::= ...

  7. 第5章 子网划分和CIDR

    第5章 子网划分和CIDR 划分网络 根据A类.B类或C类网络ID来识别网段具有一些局限性,主要是在网络级别之下不能对地址空间进行任何逻辑细分 如果一个IP是一个A类网络.数据报到达网关,然后传输到9 ...

  8. 无分类编址(CIDR,Class Inter-Domain-Routing)

    CIDR全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,大家多称之为无分类编址 CIDR的特点 (1)CIDR消除了传统的A类.B类和C类地址以及划分 ...

  9. IP地址和CIDR

    IP地址(IPV4) IPV4的地址是一个32位的二进制数,由网络ID和主机ID两部分组成,用来在网络中唯一的标识一台计算机.IP地址通常用四组3位的十进制数表示,中间用.分割,例如:192.168. ...

随机推荐

  1. 从零开始学安全(四十六)●sqli-labs 1-4关 涉及的知识点

    Less-1 到Less-4  基础知识注入 我们可以在 http://127.0.0.1/sqllib/Less-1/?id=1 后面直接添加一个 ‘ ,来看一下效果: 从上述错误当中,我们可以看到 ...

  2. Spring RestTemplate详解

    Spring RestTemplate详解   1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...

  3. 外观模式 门面模式 Facade 结构型 设计模式(十三)

    外观模式(FACADE) 又称为门面模式   意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统 ...

  4. Ext.isNumber与Ext.isNumeric

    Ext.isNumber: Ext.isNumber(1) true Ext.isNumber(new Number(1)) false Ext.isNumber("1") fal ...

  5. CSS文本属性 文本阴影text-shadow 换行 text-overflow

    div{             font-size: 20px;             text-shadow: 5px 5px 5px #333; text-shadow: 10px 10px ...

  6. C#打印模板设计,E店宝打印模板设置,winfrom打印模板设计,DevExpress.XtraReports.UI.XRTable 表格代码生成。

    一.打印效果 二.代码编辑 1 .table1 : table控件的Name: 2.label33 :label控件 实现绑定[外部平台单号]的控件: 3.label32:绑定[E店宝订单编号](S开 ...

  7. 【Android】用Cubism 2制作自己的Live2D——软件的安装与破解!

    前言- 上文我们简单的了解了Cubism的情况,但是Cubism 2.X安装好以后如果不进行破解只能使用Free版本,这是我们接受不了的,我们是专业的.是来学习的,怎么能不用Pro版本呢?所以话不多说 ...

  8. 安卓5.0系统怎么无Root激活XPOSED框架的方法

    在大多团队的引流或业务操作中,基本上都需要使用安卓的强大Xposed框架,几天前,我们团队买来了一批新的安卓5.0系统,基本上都都是基于7.0以上系统,基本上都不能够获得Root的su权限,纵然一些能 ...

  9. android使用百度地图最新sdk5.0后后代码混淆时,地图无法显示闪退问题

    描述:刚开始遇到这个问题我一步一步去排除,最后发现在初始化地图的时候,代码混淆就有问题了, 问题描述:当跳显示地图的页面APP闪退, 解决对比: 1:对于老版本百度sdk:代码混淆时语句: -libr ...

  10. oracle相关函数

    (大写的PS:oracle存储过程测试进不去解决方案:重新编译:) TRUNC(sysdate, 'd') + 1   ////表示今天所在周的周一的年月日,如今天是2016.04.21周四,则TRU ...