HOJ 2278

主要思路:将IP地址看成4位256进制的数,转化成十进制,一个segment就是一个区间。

先将所有的segment按左端点升序排列,如果几个segment有重叠,则将它们合并成一个区间。

int dn=0;l=seg[0].start;r=seg[0].end;for(int j=1;j<i;j++){if(seg[j].start<=r){r=max(seg[j].end,r);continue;}seg[dn].start=l;seg[dn].end=r;dn++;l=seg[j].start;r=seg[j].end;}seg[dn].start=l;seg[dn].end=r;dn++;

这样结束之后,可以获得几个没有公共区域的区间。

接下来可以对segment的下标进行二分了。

如果seg[i].start>target,说明target落在了有效区间的左边,此时应该取二分的上半区域,即low=mid+1

同理,如果seg[i].end<target,此时应该high=mid-1;

   low=0;high=dn-1;while (low <= high){mid = (high + low) / 2;if(temp>=seg[mid].start&&temp<=seg[mid].end){flag=1;break;}if (seg[mid].start>temp){high = mid-1 ;}else if(seg[mid].end<temp){low = mid + 1;}}

这样最终如果能找到一个区间seg[mid],使target在这个区间内,输出yes,若low>high之后仍然没有找到这样的区间,说明target不在任何一个区间内,输出no.

总的来说是挺简单的一道二分,却卡了很长时间。总是在各种细节上出错,顾此失彼。说明练习不足,码力不够,容易犯迷糊。

转载于:https://www.cnblogs.com/MicZ/archive/2012/08/24/2785380.html

HOJ 2278 IP Filtering (二分)相关推荐

  1. Day 1 二分搜索训练总结

    其实二分是一个重要的思想,有些题目不一定一眼就能看出二分,需要根据特定的条件选择正确的解法,有时二分答案时验证很简单,有时却不那么容易.一般来说,在最大(小)的条件下找一个最小(大)的解的时候可以用二 ...

  2. 明明白白你的Linux服务器——网络篇

    原文地址:http://os.51cto.com/art/201007/209530.htm 一.服务器的网络配置 在服务器的网络配置时,喜欢图形的朋友可用setup或system-config-ne ...

  3. CPUID — CPU Identification

    CPUID- CPU Identificationhttps://www.felixcloutier.com/x86/cpuid 目录 CPUID - CPU Identification Instr ...

  4. cpp+数据结构+设计模式

    文章目录 O KR cpp # 参考文献 O C++和数据结构不再成为面试短板 KR cpp +++++++++++++++++++++++++ ++++++++++++++++++++++++ ++ ...

  5. SmartFoxServer(SFS) 是什么?

    SmartFoxServer专门用于多用户联机游戏开发,支持Flash/Flex/Air, Java, .Net, Unity3D, Apple iPhone 开发. 目前有3个版本:SFS Lite ...

  6. OpenStack Train Magnum部署Kubernetes(1)--部署OpenStack Train

    基于Packstack部署OpenStack Train版本 部署环境 操作系统:CentOS Linux release 7.7.1908 OpenStack:Train PackStack:ope ...

  7. 第七章、网络安全与主机基本防护: 限制端口, 网络升级与 SELinux

    通过第一篇的锻炼之后,现在你应该已经利用 Linux 连上 Internet 了.但是你的 Linux 现在恐怕还是不怎么安全的. 因此,在开始服务器设定之前,我们必须要让你的系统强壮些!以避免被恶意 ...

  8. 鸟哥的Linux私房菜(服务器)- 第七章、网络安全与主机基本防护: 限制端口, 网络升级与 SELinux

    第七章.网络安全与主机基本防护: 限制端口, 网络升级与 SELinux 最近更新日期:2011/07/21 通过第一篇的锻炼之后,现在你应该已经利用 Linux 连上 Internet 了.但是你的 ...

  9. 16 | 二分查找(下):如何快速定位IP对应的省份地址?

    问题:假设我们有 12 万条这样的 IP 区间与归属地的对应关系,如何快速定位出一个 IP 地址的归属地呢? 二分查找的变形问题: 变体一:查找第一个值等于给定值的元素 public int bsea ...

最新文章

  1. 数据分析软件python 对电脑的要求-数据分析5大软件PK,你最爱哪个?
  2. 开启应用的时候总是以管理员身份打开的解决方案
  3. js正则限制字符串长度_正则笔记(3)万字长文,慎点。
  4. 深入研究memcache 特性和限制
  5. Android开发笔记(一百零六)支付缴费SDK
  6. Loadrunner之-VirtualUserGenerator录制web程序脚本
  7. vue x 兼容iphone_【前端vue系列】初始化一个vue工程
  8. python安装第三方库出现问题怎么办_关于Python第三方库安装失败问题的解决方案...
  9. 毕业论文系列-公式编号-等号对齐及编号
  10. 系统集成考前冲刺口诀
  11. lvds输入悬空_lvds接口定义
  12. 我国支付结算体系概况
  13. 短信后台功能与通道路由模块客户通道选择短信平台开发|国际短信通道短信后台源码
  14. 前端-鼠标经过后图标变色
  15. 程序员常用软件介绍--持续更新
  16. 生态保护重要性评价之防风固沙重要性评价
  17. 「AIGC」- ChatGPT可以怎么玩?
  18. java文件流写入文件_JAVA 输入输出流 本地文件读写
  19. PMD相位提取及相位展开简述
  20. 安东尼罗宾--激发你的无限潜能[连载]--3 4章

热门文章

  1. Ribbon、Feign、OpenFeign、spring-cloud-openfeign的区别
  2. 随笔(二)-- PyCharm如何更改背景图片
  3. STM32F4 HAL库开发 -- 复用功能外设
  4. mp4v2再学习 -- H264视频编码成MP4文件
  5. 大数运算(6)——大数阶乘(求位数)
  6. Binder源码分析之Native层(原)
  7. python编程环境要求_python公开课|我们需要优秀Python编程环境的要求居然是这些...
  8. C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证
  9. 聊天服务器的外部流量
  10. Atcoder AGC031C Differ By 1 Bit (构造、二进制)