2017.09.09【NOIP提高组】模拟赛B组
来源:互联网 发布:死而有知 编辑:程序博客网 时间:2024/06/05 16:19
T3:首先我们考虑一下,当存在一个a[i]=b[j]时,那么A中的第i个位置与B中的第j个位置对齐时,他们就对答案有贡献。举一个例子:
*A*
**A
(*为未知)
那么我们看到那两个A,首先把他们对齐:
*A*
**A
那么这一对的答案就是2*1=2。其中第一个因数的意义就是从A最多可以往前的公共部分的长度为2,第二个因数的意义是从A往后公共部分的长度为1。通过这个我们可以发现对于a[i]=b[j]对答案的贡献就是min(i,j)*min(n-i+1,n-j+1)。这是n^2的方法,能拿60分。
现在我们考虑对于每个i,与a[i]相同的有b[j1],b[j2]...b[jk],那么对于所有j有一些在i的前面,有一些在i的后面。
对于在i前面的j,min(n-i+1,n-j+1)=n-i+1,所以我们可以对(j1+j2...)维护前缀和来计算。
对于在i后面的j,min(i,j)=i,所以我们可以对(n-j1+1+n-j2+1...)维护后缀和来计算。
这样的时间复杂度是O(n)的。
阅读全文
1 0
- 2017.09.09【NOIP提高组】模拟赛B组
- 2017.09.02【NOIP提高组】模拟赛B组
- 2017.09.10【NOIP提高组】模拟赛B组
- 2017.09.23【NOIP提高组】模拟赛B组
- 2017.07.09【NOIP提高组】模拟赛B组
- 2017.12.09【NOIP提高组】模拟赛B组总结
- 2017.12.09【NOIP提高组】模拟赛B组总结
- 2017.1.15【初中部 NOIP提高组】模拟赛B组
- 2017.3.18【NOIP提高组】模拟赛B组
- 2017.3.18【NOIP提高组】模拟赛B组
- 2017.3.18【NOIP提高组】模拟赛B组小结
- 2017.05.06【NOIP提高组】模拟赛B组
- 2017.06.24【NOIP提高组】模拟赛B组
- 2017.7.6总结【NOIP提高组】模拟赛B组
- 2017.07.06【NOIP提高组】模拟赛B组
- 2017.07.06【NOIP提高组】模拟赛B组小结
- 2017.07.07【NOIP提高组】模拟赛B组
- 2017.07.05【NOIP提高组】模拟赛B组小结
- Python学习笔记·组合类型(文件操作和字典类型)
- 什么是MVC
- FIR滤波器仿真----基于Quartus II的FIR II IP核与ModelSim-Altera的联合仿真
- 用Gradle 构建你的android程序
- 【JavaScript】HTML DOM事件------onclick
- 2017.09.09【NOIP提高组】模拟赛B组
- ML课程第1节
- 开hash与闭hash
- POJ
- 【软考】-数据库
- ImageView(图像视图)-adjustViewBounds设置缩放是否保存原图长宽比
- Raize Components 好组件
- HTML5 与 HTML4 的区别(2)
- oracle中扩充number类型