CCF201812-3 CIDR合并
按题意模拟即可。。。主要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合并的更多相关文章
- CCF 201812-3 CIDR合并
CCF 201812-3 CIDR合并 //100分 93ms #include<stdio.h>//CCF上stdio.h比cstdio快!!! #include<string.h ...
- CIDR合并
code #include <iostream> #include <list> #include <sstream> #include <vector> ...
- CCF-CSP题解 201812-3 CIDR合并
题目想求与给定前缀列表等价的包含IP前缀数目最少的前缀列表. 首先是怎么存储前缀列表.用一个long long存储IP地址,再存一个前缀长度,封装在一个结构体里\(<ipNum, len> ...
- CCF-CSP认证 C++题解目录
持续更新中,记录刷题过程并分享一下小小的心得总结. 试题编号 试题名称 标签 202006-1 线性分类器 | 题解 线性规划 202006-2 稀疏向量| 题解 归并排序思想 202006-3 化学 ...
- CIDR
CIDR的介绍: CIDR(Classless Inter-Domain Routing,无类域间路由选择)它消除了传统的A类.B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空 ...
- 无分类编址(CIDR)构成超网
CIDR(无分类域间路由选择) CIDR最主要有两个以下特点: 消除传统的A,B,C地址和划分子网的概念,更有效的分配IPv4的地址空间,CIDR使IP地址又回到无分类的两级编码.记法:IP地址::= ...
- 第5章 子网划分和CIDR
第5章 子网划分和CIDR 划分网络 根据A类.B类或C类网络ID来识别网段具有一些局限性,主要是在网络级别之下不能对地址空间进行任何逻辑细分 如果一个IP是一个A类网络.数据报到达网关,然后传输到9 ...
- 无分类编址(CIDR,Class Inter-Domain-Routing)
CIDR全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,大家多称之为无分类编址 CIDR的特点 (1)CIDR消除了传统的A类.B类和C类地址以及划分 ...
- IP地址和CIDR
IP地址(IPV4) IPV4的地址是一个32位的二进制数,由网络ID和主机ID两部分组成,用来在网络中唯一的标识一台计算机.IP地址通常用四组3位的十进制数表示,中间用.分割,例如:192.168. ...
随机推荐
- dubbo-源码分析Consumer
counsumer使用服务的时候会在xml中配置<dubbo:reference> dubbo在spring.handles里的NamespaceHandle又有如下配置: registe ...
- Mybatis实现部门表增删改查以及排序
废话不说,直接开门见山! 需要在WebContent下的lib下导入两个包 mybatis-3.2.5.jar ojdbc6.jar package com.xdl.entity; import ja ...
- webpack使用exclude
在进行项目打包的时候,当使用babel-loader进行js兼容时,不需要将node_modules模块下的所有js文件进行打包.
- Html和Css学习笔记-html基础知识
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 此篇博客是我的复习笔记,html和css学的时间太久了,忘得差不多了,最近要使用一下,所以重新打开html的书略读,后记录了标签 ...
- 【广州.NET社区线下活动】云定未来 - Azure Meetup
第2届 广州.NET线下沙龙 Azure Meetup 4月13日,第2届广州.NET线下沙龙在广州银行大厦7楼中创学院路演大厅成功举办.来自微软MVP.网易的技术专家们带来了干货满满的知识分享,即使 ...
- 基于windows环境的Flask网站搭建(mysql + conda + redis)
1下载mysql-installer-community-5.7.24.0.msi (https://dev.mysql.com/downloads/windows/installer/8.0.htm ...
- 好代码是管出来的——使用GitHub
前面的文章介绍了Git的基本概念和用法,本文则是基于GitHub的一个实践介绍,主要内容有: GitHub简介 个人与组织 仓库的创建与维护 Fork与pull request 小结 GitHub简介 ...
- Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g)
Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g) 1.Oracle下载(Oracle11g) oracle下载方法,请根据以下步 ...
- vue build报copy-webpack-plugin] unable to locate异常的解决方法
ERROR in [copy-webpack-plugin] unable to locate 'J:\xxx\xxx\xxx\xxx\static' at 'J:\xxx\xxx\xxx\xxx\s ...
- SpringBoot Mybatis 使用LocalDateTime
mybatis-spring-boot-starter 2.0.1 会报错,不知道如何解决(建议先不用) mybatis-spring-boot-starter 2.0.1 - 1.3.2 版本不会报 ...