No.2. 【NOIP2013模拟】终极武器
  • 题意:

    • 给定你一些区间,然后让你找出\(1\sim 9\)中的等价类数字.
    • 也就是说在任何一个区间里的任何一个数,把其中后\(k\)位中的某一位换成等价类数字,仍然在某个区间中。
    • \(n\le 10^5, k\le 18\)
  • 据说这是一道防AK题,考场上能拿到满分确实是比较困难的.

  • 要有耐心的推,先从简单情况入手.

  • 这里给出详细的题解:

  • 因为要判断等价类数字,所以我们可以用一个矩阵\(a[i][j]=1\)表示\(i,j\)是等价的,否则不等价.

  • 此时例如我要判断\(12345\sim 12378\)中的等价类数字,这个比较容易,假设\(k=3\),则当我枚举倒数第\(3\)位时,注意到\(l,r\)的前三位都相同,此时我只需要判断把\(3\)改成\(x\)之后\(12x45\sim 12x78\)是否都出现且出现在在同一个区间中.

  • 如何判断一个区间\(l,r\)是否出现在同一区间?

  • 我们可以把多个区间首尾合并一下,因为保证了区间没有交集,所以可以直接二分一下\(l,r\)所在区间,判断是否相同即可.

  • 解决完这个问题之后,我们就可以完美解决上面的例子.

  • 但如果是区间\(12345\sim 12758\)呢?此时枚举到第\(3\)位时,会发现,区间\(3\sim 7\)都是第\(3\)位原本存在的数.

  • 所以我们需要先枚举第\(3\)位原本的数,然后再枚举换成什么数,看一下是否出现在对应区间里.

  • 可以分成三类,即\(3,4\sim 6,7\),出现的区间分别是\(45\sim 99, 0\sim 99, 0\sim 58\).

  • 但还有第三种情况,例如\(12345\sim 78543\),此时假设依然枚举第\(3\)位,会发现,前两位的数都不相同。

  • 这时,需要仔细观察,会发现,其实\(13[][][] \sim 77[][][]\)这些位上的数是没任何用的,因为不管你倒数第三位怎么改,前两位已经出现在区间中,所以这样的改动是没有任何意义的,所以我们也不需要判断.

  • 然后问题就转化为判断\(12345\sim 12999\)以及\(78000\sim 78543\)这两段区间了.

  • 于是又转化为之前熟悉的问题.

  • 至此,本题完美解决,总结一下,用到了两个套路:

    • 用矩阵表示等价类.
    • 用二分判断区间是否出现,合并区间的思想很重要.

【NOIP2013模拟】终极武器(经典分析+二分区间)的更多相关文章

  1. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  2. 【NOIP2013模拟联考7】OSU

    [NOIP2013模拟联考7]OSU 描述 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分, ...

  3. HDU 4768 (二分区间---涨姿势)

    题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字. 分析:读完题并没有思路,后来知道是二分区间,枚举是哪 ...

  4. 【BZOJ5308】[ZJOI2018]胖(模拟,ST表,二分)

    [BZOJ5308][ZJOI2018]胖(模拟,ST表,二分) 题面 BZOJ 洛谷 题解 首先发现每条\(0\)出发的边都一定会更新到底下的一段区间的点. 考虑存在一条\(0\rightarrow ...

  5. CSU 1592 石子合并 (经典题)【区间DP】

    <题目链接> 题目大意: 现在有n堆石子,第i堆有ai个石子.现在要把这些石子合并成一堆,每次只能合并相邻两个,每次合并的代价是两堆石子的总石子数.求合并所有石子的最小代价. Input ...

  6. JZOJ 3463. 【NOIP2013模拟联考5】军训

    3463. [NOIP2013模拟联考5]军训(training) (Standard IO) Time Limits: 2000 ms  Memory Limits: 262144 KB  Deta ...

  7. JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)

    3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...

  8. JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)

    3526. [NOIP2013模拟11.7A组]不等式(solve) (File IO): input:solve.in output:solve.out Time Limits: 1000 ms M ...

  9. HDU 5875 st+二分区间

    题目大意:给你n个数,q次询问,每次询问区间[l, r],问a[i]%a[i + 1] % a[i + 2]...%a[j](j <= r)的值 思路:st预处理维护,再二分区间,复杂度n*(l ...

随机推荐

  1. 关于MongoDB数据库的日志解析

    MongoDB日志记录了数据库实例的健康状态.语句的执行状况.资源的消耗情况,所以日志对于分析数据库服务和性能优化很有帮助. 因此,很有必要花费一些时间来学习解析一下MongoDB的日志文件. 日志信 ...

  2. chart 模板 - 每天5分钟玩转 Docker 容器技术(165)

    Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板. 以 templates/secrets.yaml 为例: 从结构看,文件的内 ...

  3. MySQL 修改账号的IP限制条件

    今天遇到一个需求:修改MySQL用户的权限,需要限制特定IP地址才能访问,第一次遇到这类需求,结果在测试过程,使用更新系统权限报发现出现了一些问题, 具体演示如下. 下面测试环境为MySQL 5.6. ...

  4. selenium-启动浏览器(二)

    selenium下启动浏览器,有两种方法 以 chromedrvier.exe 为例 1. chromedrvier.exe 与 python 启动程序 python.exe 在同一个目录下则可直接使 ...

  5. Python爬虫之正则表达式(3)

    # re.sub # 替换字符串中每一个匹配的子串后返回替换后的字符串 import re content = 'Extra strings Hello 1234567 World_This is a ...

  6. mysql的分组

    以下是根据老师的视屏写的总结,要自己实际操作以下. 首先老师一顿操作猛如虎,得到以下的表. 然后进行以下的操作: 发现筛选时报错了,老师的解释实说,分组是因为mysql不知道选择谁而出现报错,因为pa ...

  7. sbt安裝與配置

    官方下載地址:https://www.scala-sbt.org/download.html?spm=a2c4e.11153940.blogcont238365.9.42d147e0iF8dhv 解压 ...

  8. POJ3686 The Windy's

    嘟嘟嘟 刚做费用流,思路完全不对呀-- 应该这么想(应该说敢这么想):这道题的关键在于怎么体现这个玩具是第几个加工的,只有这才能求出他的加工时间(因为加工时间包括等待时间). 但等待时间不好求,因此要 ...

  9. LeetCode练习4 找出这两个有序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

  10. 使用Roslyn脚本化C#代码,C#动态脚本实现方案

    [前言] Roslyn 是微软公司开源的 .NET 编译器. 编译器支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API. Roslyn不仅仅可以直接编译输出,难能可贵的就 ...