试题编号: 201812-3
试题名称: CIDR合并
时间限制: 1.0s
内存限制: 512.0MB



样例输入
2
1
2

样例输出
1.0.0.0/8
2.0.0.0/8

样例输入
2
10/9
10.128/9

样例输出
10.0.0.0/8

样例输入
2
0/1
128/1

样例输出
0.0.0.0/0

问题链接:CCF202104-1 灰度直方图
问题简述:(略)
问题分析:按题意进行处理即可,有2次合并处理。
程序说明:(略)
参考链接:(略)
题记:位运算巧妙,输入文本处理简洁。

100分的C++语言程序如下:

/* CCF201812-3 CIDR合并 */#include <bits/stdc++.h>using namespace std;const int N = 100000 + 1;
struct Node {unsigned int num;int len;bool flag;
} ip[N], ip2[N];
int ipcnt = 0;bool cmp(Node a, Node b)
{return a.num == b.num ? a.len < b.len : a.num < b.num;
}void iptok(char s[])
{unsigned int num[4] = {0, 0, 0, 0};int cnt = 0, len = 0, flag = 0;for (int i = 0; s[i]; i++)if (s[i] == '.') cnt++;else if (s[i] == '/') flag = 1;else {if (flag) len = len * 10 + s[i] - '0';else num[cnt] = num[cnt] * 10 + s[i] - '0';}if (flag == 0) {int pcnt = 0;for (int i = 0; s[i]; i++)if (s[i] == '.') pcnt++;len = pcnt * 8 + 8;}ip[++ipcnt].len = len;ip[ipcnt].flag = true;ip[ipcnt].num = (((num[0] * 256) + num[1]) * 256 + num[2]) * 256 + num[3];
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(NULL);cout.tie(NULL);int n;char s[20];cin >> n;for (int i = 1; i <= n; i++) {cin >> s;iptok(s);}sort(ip + 1, ip + 1 + n, cmp);int cnt = 1;ip2[cnt] = ip[cnt];for (int i = 2; i <= n; i++)for (int j = 0; j < ip2[cnt].len; j++)if (((ip[i].num >> (31 - j)) & 1) != ((ip2[cnt].num >> (31 - j)) & 1)) {ip2[++cnt] = ip[i];break;}for (; ;) {bool flag = false;int k;for (int i = 1; i <= cnt; i++)if (ip2[i].flag) {k = i;break;}for (int i = k + 1; i <= cnt; i++)if (ip2[i].flag) {if (ip2[i].len == ip2[k].len) {for (int j = 0; j < ip2[i].len - 1; j++)if (((ip2[i].num >> (31 - j)) & 1) != ((ip2[k].num >> (31 - j)) & 1)) {k = i;break;}if (k != i) {ip2[k].len -= 1;ip2[i].flag = false;flag = true;}} elsek = i;}if (!flag) break;}for (int i = 1; i <= cnt; i++)if (ip2[i].flag) {unsigned int a = ip2[i].num >> 24;unsigned int b = (ip2[i].num % (256 * 256 * 256)) >> 16;unsigned int c = (ip2[i].num % (256 * 256)) >> 8;unsigned int d = ip2[i].num % 256;cout << a << "." << b << "." << c << "." << d << "/" << ip2[i].len << endl;}return 0;
}

CCF201812-3 CIDR合并(100分)【位运算+文本】相关推荐

  1. CCF201909-3 字符画(100分)【文本处理】

    试题编号: 201909-3 试题名称: 字符画 时间限制: 5.0s 内存限制: 512.0MB 问题链接:CCF201909-3 字符画 问题简述:(略) 问题分析:(略) 程序说明:(略) 参考 ...

  2. CCF201409-3 字符串匹配(100分)【文本处理】

    试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需 ...

  3. CCF202006-3 Markdown渲染器(100分)【文本处理】

    试题编号: 202006-3 试题名称: Markdown渲染器 时间限制: 1.0s 内存限制: 512.0MB 问题链接:CCF202006-3 Markdown渲染器 问题简述:(略) 问题分析 ...

  4. CCF201912-3 化学方程式(100分)【文本处理】

    试题编号: 201912-3 试题名称: 化学方程式 时间限制: 1.0s 内存限制: 512.0MB 问题链接:CCF201912-3 化学方程式 问题简述:(略) 问题分析:文本处理问题,按字符串 ...

  5. CCF201809-3 元素选择器(100分)【文本处理】

    试题编号: 201809-3 试题名称: 元素选择器 时间限制: 1.0s 内存限制: 256.0MB 问题链接:CCF201809-3 元素选择器 问题简述:(略) 问题分析:文本处理问题,需要有好 ...

  6. CCF201703-3 Markdown(100分)【文本处理】

    试题编号: 201703-3 试题名称: Markdown 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Markdown 是一种很流行的轻量级标记语言(lightweigh ...

  7. CCF201709-3 JSON查询(100分)【文本处理】

    问题描述 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,可以用来描述半结构化的数 据.JSON 格式中的基本单元是值 (value),出于简化的目的本 ...

  8. CCF201803-3 URL映射(100分)【文本处理+暴力】

    试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 ...

  9. 使用位运算代替乘除法

    原文:http://www.51hei.com/mcu/4037.html 已知 : unsigned int temp=1000; unsigned int result=0; 求: result ...

最新文章

  1. bootstrap datepicker Uncaught TypeError: Cannot call method 'split' of undefined问题
  2. 安装python3.7和PyCharm专业版
  3. Luogu3375 【模板】KMP字符串匹配
  4. 查看ubuntu磁盘空间占用及占用空间大的文件
  5. java8新特性-lambda表达式和stream API的简单使用
  6. 【队列】队列的基本操作总结
  7. js日期格式化精髓总结
  8. undefined: resolver.BuildOption undefined: resolver.ResolveNowOption 报错的解决办法
  9. 基于CDS view生成的OData服务的metadata是如何生成的
  10. 杀死应用进程 android,如何杀死Android应用程序启动的logcat进程?
  11. Multi_thread--Linux下多线程编程中信号量介绍及简单使用
  12. db2报01650_db2错误代码
  13. Android学习笔记---Android平台1.使用dom解析xml文件
  14. 如何在SQL Server 2016中使用并行插入以提高查询性能
  15. 返回通知异常通知环绕通知
  16. python架构师书籍_阿里巴巴高级架构师:学好python这本书必看,堪称python入门宝典...
  17. 风火速打印小程序分析
  18. Python tan函数图像绘制,不带有极值的线条
  19. c语言编程n元一次方程,用C语言编写程序:N元一次方程组的解.docx
  20. 2020年中级数据库系统工程师考试笔记7—关系数据库1

热门文章

  1. gpu跑普通python程序_普通电脑PC怎样跑TensorFlow的GPU模式
  2. 编译GDAL支持OpenCL使用GPU加速
  3. ArcGIS水文分析实战教程(12)河网分级流程
  4. MongoDB的Go语言驱动----mgo的使用指南
  5. Golang实现基于Websocket协议的H5聊天室
  6. 快速创建精彩的Flash游戏(一) Flash2D游戏引擎简介
  7. IOCP编程之基本原理
  8. Java复习总结(二)Java SE基础知识
  9. 机器学习之非监督学习(六)——聚类(K-Means)
  10. c++ class 类名 和 include 的区别