题目大意:

  给你一些子网,求它们在整个网段的补集。

思路:

  将子网转换成二进制建一棵Trie,直接DFS搜到没有了就记下来输出。注意:所给的子网会有交集,若搜到结尾就不向下搜了。

代码:

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 40000
using namespace std;
int cnt,num,a[],flag[M<<],trie[M<<][];
struct node { int len; int d[]; }ans[M<<]; int read()
{
int x=;
char ch=getchar();
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') x=(x<<)+(x<<)+ch-,ch=getchar();
return x;
} void wk(int x,int y)
{
for (int l=;l;l--,x/=) a[l+(y<<)]=x%;
} void ins(int l)
{
int now=,i,j;
for (i=;i<=l;now=trie[now][a[i]],i++)
if (!trie[now][a[i]]) trie[now][a[i]]=++cnt;
flag[now]=;
} void sa(long long x,int l)
{
ans[++num].len=l; int i,k=;
for (i=l;i;i--,x>>=) a[i]=x%;
ans[num].d[]=ans[num].d[]=ans[num].d[]=ans[num].d[]=;
for (i=;i<=l;i++)
{
ans[num].d[k]=(ans[num].d[k]<<)+a[i];
if (i%==) k++;
}
if (l%) ans[num].d[k]<<=(-l%);
} void dfs(int k,long long x,int l)
{
if (flag[k]) return;
if (trie[k][])
if (trie[k][]) dfs(trie[k][],x<<,l+),dfs(trie[k][],x<<|,l+);
else sa(x<<|,l+),dfs(trie[k][],x<<,l+);
else if (trie[k][]) sa(x<<,l+),dfs(trie[k][],x<<|,l+);
} int main()
{
int t=read(),ii;
for (ii=;ii<=t;ii++)
{
int n=read(),i,j;
memset(trie,,sizeof(trie));
memset(flag,,sizeof(flag));
for (i=;i<=n;i++)
{
int u=read(),v=read(),w=read(),x=read();
wk(u,),wk(v,),wk(w,),wk(x,),ins(read());
}
num=,dfs(,,);
printf("Case #%d:\n",ii);
if (!n) printf("1\n0.0.0.0/0\n");
else
{
printf("%d\n",num);
for (i=;i<=num;i++) printf("%d.%d.%d.%d/%d\n",ans[i].d[],ans[i].d[],ans[i].d[],ans[i].d[],ans[i].len);
}
}
return ;
}

BNUOJ48605International Collegiate Routing Contest 题解的更多相关文章

  1. 2015 Syrian Private Universities Collegiate Programming Contest 题解

    题目在这里>_< 发现这场比赛在网上没有完整的题解,甚至连题目代码都没人贴出来(大概是因为题目太水了吧...).所以宝宝就来写个题解,也就当作成长记录了233333 A. Window 题 ...

  2. 2015 ACM Amman Collegiate Programming Contest 题解

    [题目链接] A - Who Is The Winner 模拟. #include <bits/stdc++.h> using namespace std; int T; int n; s ...

  3. 2017 ACM Amman Collegiate Programming Contest 题解

    [题目链接] A - Watching TV 模拟.统计一下哪个数字最多即可. #include <bits/stdc++.h> using namespace std; const in ...

  4. LA 7043 International Collegiate Routing Contest 路由表 字典树离散化+bitset 银牌题

    题目链接:给你n(n<=3e4)个路由地址(注意有子网掩码现象), 路由地址:128.0.0.0/1的形式 要求你输出一个路由集合,其是给定的路由集合的补集,且个数越少越好 #include & ...

  5. The 2015 China Collegiate Programming Contest Game Rooms

    Game Rooms Time Limit: 4000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  6. (寒假GYM开黑)2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)

    layout: post title: 2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) author: &qu ...

  7. (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)

    layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...

  8. Codeforces Gym101572 B.Best Relay Team (2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017))

    2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) 今日份的训练,题目难度4颗星,心态被打崩了,会的算法太少了,知 ...

  9. The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540

    Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Othe ...

随机推荐

  1. 解决MYSQL错误:ERROR 1040 (08004): Too many connections

    方法一: show processlist; show variables like 'max_connections'; show global status like 'max_used_conn ...

  2. 将数据导出成excel表

    /// <summary> /// 生成excel表 /// </summary> /// <param name="dt">数据表</p ...

  3. memcached的最佳实践方案

    基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...

  4. JavaScript中new和this

    [TOC] new var obj = new Base(); 相当于: var obj = {}; //创建空对象obj obj.__proto__ = Base.prototype; //将空对象 ...

  5. sql语句中----删除表数据的"三兄弟"

    说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大- ...

  6. 在Salesforce中对某一个Object添加 Validation Rule

    在Salesforce中可以对某一个Object添加相应的 Validation Rule 来进行一个全局的条件判断,比如满足什么样的条件的修改允许提交,不满足的要提示相应的错误信息. 要创建一个Va ...

  7. windows下R语言在终端的运行

    在windows下可以有多种方式来运行R,R导论的这些章节给出一些详细的指导. 通常在环境变量离包含R的安装目录类似于R\R-3.1.2\bin\x64的情况下,就可以在CMD下运行R程序了 注意我这 ...

  8. Socket 通讯

    #import "ViewController.h" #import <sys/socket.h> #import <netinet/in.h> #impo ...

  9. Arduino101学习笔记(五)—— 模拟IO

    1.配置IO管脚 //***************************************************************************************** ...

  10. 通信原理实践(二)——幅度调制

    一.幅度调制,并画出时域和频域波形 1.代码如下: function [ p_n ] = AM_func( N,fs,fm,Am,fc,Ac,Ma ) %UNTITLED 此处显示有关此函数的摘要 % ...