当前位置: 首页 > article >正文

CF292C Beautiful IP Addresses 题解

题目介绍

这道题我们读完题后看到题目给的条件:

IP 地址,且去掉分割的点以后的纯数字字符串是回文,那么就叫做美丽的 IP。

暴力方法

是不是听起来很简单,我先介绍一个大多数人都能想到的部分分做法:

枚举出所有 IP 的纯数字字符串,然后判断回文。

是回文那就考虑点的位置。

就是那么简单,但是我们来算一算最坏会运行多少次。

首先,我们要知道,IPv4 地址的每一位都是 0 0 0 ~ 255 255 255

那么一共就是 26 6 4 266^4 2664 种,通过计算器我们得知这个大小大概是 5 × 1 0 9 5 \times 10^9 5×109

很明显,这种算法是无法通过的,那我们就要加以优化。

优化

我们想一下:既然我们都要判断回文了,为什么我们不直接构造一个回文呢?

那你可能要问了:“你说得那么简单,那怎么构造回文?而且,就算构造了,你怎么证明你这个算法就是对的?”

如何构造回文?

我们先一起想一想我们是怎么用双指针判断回文的。

是不是像这样一个指头一个指尾,然后同时向中间走?

那我们可不可以反过来,先填充绿色箭头,再填充浅灰色、深灰色、黑色?

最后我们把构造的回文存在一个 vector 变量里面,等会去分割点不就行了么?

哦对了,对于 IP 产生的纯数字字符串长度是 8 8 8 ~ 12 12 12。我的做法会去判断奇偶,如果是奇数就先特殊地添加一位(绿色箭头),偶数则不用。

如何添加分割点?

我们在这里先写一个判断(check)来判断这个串是否是合法,判断的方法其实就只是把这个纯数字串转成数字,进行判断是否 ⩾ 0 \geqslant 0 0 以及 ⩽ 255 \leqslant 255 255,方便我们后面进行分割。

我们想一想,我们已经求出了原数字串,已经规定了一共三个点。

那么我们为什么不可以切割出四个数字串,然后用三个点连接起来呢?

思路就是这样,模拟即可。


http://www.kler.cn/a/555064.html

相关文章:

  • Redis-缓存过期和内存淘汰
  • 机器学习和深度神经网络 参数调参数 太麻烦,非常费时间怎么办,用自动化超参数优化方法
  • IPv6报头40字节具体怎么分配的?
  • 前端面试题---循环渲染里面key的作用(vue)
  • [Android]文本多的时候让TextView的字体自动变小
  • 测试使用Cursor中的deepseek-V3大模型辅助开发一个小程序
  • 58,web面试测试题
  • Go Web 项目实战:构建 RESTful API、命令行工具及应用部署
  • 网络安全域管理 网络安全管理体系
  • 某手sig3-ios算法 Chomper黑盒调用
  • 解决gradio无法通过ip访问
  • Fino1: 关于推理增强型大型语言模型在金融领域的可迁移性
  • C#应用程序重启实现
  • HTML/CSS中属性选择器
  • 蓝桥杯备考:贪心算法之矩阵消除游戏
  • VScode 使用Deepseek又方便又好用的另一款插件
  • 【STM32】外部时钟|红外反射光电开关
  • EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
  • 前端导出word文件,并包含导出Echarts图表等
  • phpmyadmin 文件包含(CVE-2014-8959)