acm随笔
现在的我还是个蒟蒻,不过我会加油!!!
持续更新中……
数学
1.钝角三角形平移不变性:
假设a,b,c满足a+b>c,a2 +b2 <c2 ,则a,b+x,c+x也满足此性质。(x>=1)
对于足够大的a,b,有a,b,a+b-k为钝角三角形
可先证明一个最小的a,b满足,再由平移不变性可以推出后续的a,b也是。
比如234->k=1,3,5,6->k=2
题目:https://acm.ecnu.edu.cn/contest/151/problem/A/
性质
-
线段树
线段树每层的节点数量必定是2^k,所以对长度为len的节点来说,他的根节点(1,n)中n的范围一定是在2k(len−1)∼2k(len+1)之间的
https://acm.ecnu.edu.cn/contest/151/problem/C/ -
同余类
统计间隔m的数的数量,只需要将每个数mod m,每一个同余类就是一组间隔m的点
https://codeforces.com/group/uVAsoW2Jkj/contest/241184/problem/L -
斐波那锲 fibonacci数列
f(n)=f(n-2+2)=f(2)f(n-1)+f(1)(n-2)
数归可证:f(n+k)=f(k)(n+1)+f(k-1)f(n)
这里引用胡老师的一篇博文ORZ
https://zybuluo.com/yang12138/note/1441695
思想
这里的思想好多都和2有关啊
-
倍增
假如f(x)单调递增,已知x可求出f(x),给定m,如何快速确定使 f(x)<=m<f(x+1) 的x呢,一个优秀的办法就是倍增,我们按1,2,4,8…即2k一路试探,直到f(2k)大于m,那么x一定在[2k-1 ,2k )之间,令mid = f(2k-1 +2k-2 ),然后就可以快乐二分啦!!!
-
差分与前缀和
形象化表达一下,每一行表示ai的,一个方块就是对应差分,而每个涂黑倒三角就是前缀和
a7 ■ ■ ■ ■ ■ ■ ■
a6 ■ ■ ■ ■ ■ ■ □
a5 ■ ■ ■ ■ ■ □ □
a4 ■ ■ ■ ■ □ □ □
a3 ■ ■ ■ □ □ □ □
a2 ■ ■ □ □ □ □ □
a1 ■ □ □ □ □ □ □记原数组ai差分ci,前缀和sumi
第i行方块值的和是ai
每一列的方块值都是一样的,第j列值为cj一个实际的运用就是让区间和树状数组能做到区间修改
区间修改的优化就是修改头尾的差分值,即对差分值做单点修改
我们维护两个树状数组,一个是维护ci的,查询ci求出的值是ai
第二个是维护Ci=(i-1)*ci的,即维护白色格子每一列,查询求出的值是三角区间和这样子的话两个树状数组的本质都是维护差分
修改的时候单点修改差分就行了呢于是前缀和sum(n)=n*an - Cn
结合图像来说就是 黑色倒三角面积和 等于 矩形面积 - 白色三角面积 -
二分答案
适用于答案比较容易检验而直接求解几乎不太可能的情况,一般用于求有精度要求的题目
-
CDQ分治
本质:离线修改与查询并二分,只不过每次将指令二分,前后两个指针p1,p2分别跑,前面修改,后面查询,只要保证操作的顺序和离线相同即可,复杂度的优化体现在每次指令区间内的修改可以叠加。
-
子方案更优解
https://codeforces.com/group/uVAsoW2Jkj/contest/241184/problem/L
任何奇数步长都有更优子方案:步长为1
任何偶数步长都有更优子方案:步长为2n
因此只要枚举很少的步长就行了
这类问题主要是通过比较不同方案之间的关系,将劣解舍去,考虑更优解,从而优化。
论文集收获
1.浅谈数形结合思想在信息学竞赛中的应用
例一 Raney引理的证明利用周期函数图像化表示再用两条斜率为1/N的直线包住简直太妙了
例二 则完美地解释了斜率优化
- 这里简述一下题意,给定序列a1 ~ an,求Max average(al,ar),(r-l+1>=F)
即求最小的一段长度大于等于给定值的序列的平均值 - 这里记sum(i)为1-i的前缀和,那么即求
s
u
m
(
r
)
−
s
u
m
(
l
−
1
)
r
−
(
l
−
1
)
\frac{sum(r)-sum(l-1)}{r-(l-1)}
r−(l−1)sum(r)−sum(l−1)
这难道不是两点A(l-1,sum(l-1)),B(r,sum(r))之间的斜率公式吗 !!! - 于是乎
还没看完,以后补
2.动态规划算法的优化技巧 毛子青
平行四边形不等式::m[i,j]+m[i’,j’]<=m[i’,j]+m[i,j’],i<i’<j<j’
区间包含单调性质:w[i’,j]≤w[i,j’],i<i’<j<j’
由上述两个性质可以推出 决策单调性:
s[i,j]≤s[i,j+1]≤s[i+1,j+1], i≤j
证明如下:
令mk[i,j]=m[i,k-1]+m[k,j]+w[i,j],s[i,j]为区间[i,j]的最佳分割点。要证明s[i,j]≤s[i,j+1],只要证明对于所有i<k≤k’≤j且mk’[i,j]≤mk[i,j],有:mk’[i,j+1]≤mk[i,j+1]。
这句话想证明的是,对于区间[l,r]当区间的r++时,我已有的分割点k左侧的分割方案都是较劣解。
加强下不等式:mk[i,j] + mk’[i,j+1] ≤ mk[i,j+1] + mk’[i,j] (左侧加小数,右侧加大数,不等式加强)
由平行四边形不等式可得:m[k,j]+m[k’,j+1]≤m[k’,j]+m[k,j+1],( k<j )
=>( m[i,k-1] +m[k,j] )+( m[i,k’-1] + m[k’,j+1] ) ≤ ( m[i,k-1] + m[k,j+1] ) + ( m[i,k’-1] + m[k’,j] )
=>mk[i,j] + mk’[i,j+1] ≤ mk[i,j+1] + mk’[i,j]
这样就证明了决策单调性