【NOIP2013模拟】终极武器(经典分析+二分区间)
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模拟】终极武器(经典分析+二分区间)的更多相关文章
- JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)
3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...
- 【NOIP2013模拟联考7】OSU
[NOIP2013模拟联考7]OSU 描述 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分, ...
- HDU 4768 (二分区间---涨姿势)
题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字. 分析:读完题并没有思路,后来知道是二分区间,枚举是哪 ...
- 【BZOJ5308】[ZJOI2018]胖(模拟,ST表,二分)
[BZOJ5308][ZJOI2018]胖(模拟,ST表,二分) 题面 BZOJ 洛谷 题解 首先发现每条\(0\)出发的边都一定会更新到底下的一段区间的点. 考虑存在一条\(0\rightarrow ...
- CSU 1592 石子合并 (经典题)【区间DP】
<题目链接> 题目大意: 现在有n堆石子,第i堆有ai个石子.现在要把这些石子合并成一堆,每次只能合并相邻两个,每次合并的代价是两堆石子的总石子数.求合并所有石子的最小代价. Input ...
- JZOJ 3463. 【NOIP2013模拟联考5】军训
3463. [NOIP2013模拟联考5]军训(training) (Standard IO) Time Limits: 2000 ms Memory Limits: 262144 KB Deta ...
- JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)
3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...
- JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)
3526. [NOIP2013模拟11.7A组]不等式(solve) (File IO): input:solve.in output:solve.out Time Limits: 1000 ms M ...
- HDU 5875 st+二分区间
题目大意:给你n个数,q次询问,每次询问区间[l, r],问a[i]%a[i + 1] % a[i + 2]...%a[j](j <= r)的值 思路:st预处理维护,再二分区间,复杂度n*(l ...
随机推荐
- Truffle 4.0、Geth 1.7.2、TestRPC在私有链上搭建智能合约
目录 目录 1.什么是 Truffle? 2.适合 Truffle 开发的客户端 3.Truffle的源代码地址 4.如何安装? 4.1.安装 Go-Ethereum 1.7.2 4.2.安装 Tru ...
- ORA-12537: Network Session: End of file
最近开发组同事使用Azure的Function App访问公司内部的Oracle数据库时,偶尔会遇到"ORA-12537: Network Session: End of file" ...
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...
- 一文把samba相关的都说清楚
1.前言 samba源码都一样,配置也也一样,各个不同linux版本,唯一不同的是对服务的启动方式不同.下面以ubuntu14.4为例,说明. 2. 安装samba samba的安装,可以源码安装,大 ...
- Docker 启动,进入容器,查看log命令
1.启动一个容器 docker run -d -P training/webapp python app.py -d:让容器在后台运行. -P:将容器内部使用的网络端口映射到我们使用的主机上. 如果需 ...
- jQuery 中的简单动画
制作动画常用方法: show("速度") 显示元素 hide("速度") 隐藏元素 toggle() 切换效果 例如下jQuery代 ...
- GDB调试指南-启动调试
前言 GDB(GNU Debugger)是UNIX及UNIX-like下的强大调试工具,可以调试ada, c, c++, asm, minimal, d, fortran, objective-c, ...
- 关于模块安装及cmd安装pip3模块失败的 Read timed out.的补救方法
自己在安装pip中的request模块时,安装到一半老是报错.我看了下报错的代码最后一句写的是 Read timed out. 就是读取超时,从网上查了一下,原因是由于中国的网比较慢,下载超时.需要在 ...
- DeeplabV3+ 命令行不显示miou的解决
首先看到训练时会在命令行里输出 loss 和 total loss,那是怎么做到的呢,通过分析 train.py 源码,看到如下代码 total_loss = tf.cond( should_log, ...
- 《jmeter:菜鸟入门到进阶》系列
jmeter是我从事软件测试工作以来接触的第一个性能测试工具,也是耗费时间精力最多的一个工具,当然,学习jmeter过程中,由于知识储备不够,也顺带学习了很多其他相关的一些知识. 一直有个想法,就是把 ...