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. ...
随机推荐
- Java开发笔记(八十四)文件与目录的管理
程序除了处理内存中的数据结构,还要操作磁盘上的各类文件,这里的磁盘是个统称,泛指可以持久保留数据的存储介质,包括但不限于:插在软驱中的软盘.固定在机箱中的硬盘.插在光驱中的光盘.插在USB接口上的U盘 ...
- vue学习记录①(vue-cli脚手架构建项目结构)
我们直接从vue的工程化开始入手. 在这里用git命令行搭建项目环境.(当然直接cmd命令行下也是一样的) git下载安装地址:https://www.git-scm.com/download/win ...
- 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 ...
- IIS发布的网站,内网和外网不能访问的解决办法
A.关闭防火墙.控制面板-Windows防火墙-打开或关闭Windows防火墙(不推荐) B.打开:控制面板-Windows防火墙-高级设置-入站规则,在入站规则窗口中找到”BranchCache内容 ...
- git window安装与注册邮箱用户名
1.git window版本下载 https://git-scm.com/downlods 下载完后点击安装包安装,一直下一步就行; 2.验证安装是否成功 在开始菜单里找到“Git”->“Git ...
- golang 使用匿名结构体的问题
golang允许使用匿名结构体,形如 type Test struct { param1 struct { param2 string } } 一般在使用的时候可以直接这样初始化 a := Test{ ...
- 解决Editor.md通过代码块原样输出Emoji被强制解析问题
Editor.md是一款优秀的开源Markdown 编辑器,在使用中遇到的一些问题和功能改进分享给需要的伙伴. 项目地址 https://github.com/pandao/editor.md 问题 ...
- 订制rpm包到Centos7镜像中
本文以CentOS 7.4 最小化镜像(CentOS-7-x86_64-Minimal-1708.iso)为模版 要达到的目的: 1.订制所需的rpm软件包集成到iso文件中 2.制作完成的ISO全自 ...
- Scala操作Hbase空指针异常java.lang.NullPointerException处理
Hbase版本:Hortonworks Hbase 1.1.2 问题描述:使用Scala操作Hbase时,发生空指针异常(java.lang.RuntimeException: java.lang.N ...
- java学习入门之---使用idea创建第一个maven项目
一.准备条件: 1.安装idea旗舰版 2.安装tomcat 二.打开idea开始创建 1.创建Project 2.选择项目类型为maven 3.输入组名和项目名 ---> 下一步 ----&g ...