BestCoder Round #81
2016-04-26 10:58
162 查看
Machine
红、绿、蓝分别表示0、1、2,每次操作就相当于+1,原问题就转化为求nn的三进制表示的最低的mm位,即求 nn mod 3^m3m的三进制表示。
复杂度 O(m)O(m)
Matrix
(1)对于交换行、交换列的操作,分别记录当前状态下每一行、每一列是原始数组的哪一行、哪一列即可。对每一行、每一列加一个数的操作,也可以两个数组分别记录。注意当交换行、列的同时,也要交换增量数组。
输出时通过索引找到原矩阵中的值,再加上行、列的增量。
复杂度O(q+mn)O(q+mn)
(2)或者交换增量数组的时候,索引到真实应该增加的行、列,而交换行、列的时候,单纯交换行列。
String
有一个明显的性质:如果子串(i,j)(i,j)包含了至少kk个不同的字符,那么子串(i,k),(j< k < length)(i,k),(j<k<length)也包含了至少kk个不同字符。
因此对于每一个左边界,只要找到最小的满足条件的右边界,就能在O(1)O(1)时间内统计完所有以这个左边界开始的符合条件的子串。
寻找这个右边界,是经典的追赶法(尺取法,双指针法)问题。维护两个指针(数组下标),轮流更新左右边界,同时累加答案即可。复杂度 O(length(S))O(length(S))。
这里注意,一次只移动一个指针(前指针或后指针)。
相关文章推荐
- 内部类的作用
- frame页面之间的相互调用
- 如何在APICloud平台使用腾讯X5引擎
- nyoj20-吝啬的国度
- ArrayList的初始化赋值
- 设计模式之【责任链】
- 我常去逛的iOS干货文章、blog等
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Python里的OS模块常用函数说明
- 每日一个小算法-冒泡排序
- Ext基础操作dom更改css
- 在机顶盒上被移除adb后恢复的办法
- lua中尽量使用local
- ANSI X9.19 MAC算法
- 学习AngularJs:Directive指令用法(完整版)
- 关于XCode7objc语法增强
- 云与VR配种的可能性
- JAVA的协程实现
- 关于Java EE项目GET,POST中文编码问题
- 大型网站技术架构(笔记)