KUR
考虑小串会在大串的哪些位置出现,然后就是设小串开头的位置为 \(x\),然后小串第 \(i\) 个位置如果 \(a_i=0\) ,则 \(0\leq a(x+i)+b<p (\mod n)\),\(a_i=1\) 同理,然后用这个关系解出 \(ax\) 的取值范围。但注意 \(x\) 取不到 \([n-m+1,n]\) ,因为这样小串放不下,所以暴力的删掉就行了。
PIE
就每次从最上面中最左面开始验证就行。如果每次把整个矩阵扫一遍复杂度是错的,但每次只验证 \(x\) 的位置就是对的因为这样每个 \(x\) 只会被验证一次。
就我这种垃圾才会调这么久的 QAQ
KIN
对于每个右端点,找一个最优的左端点。所以从左往右扫,每次扫到一个颜色就把从这个位置到这个颜色上一次出现的位置加上贡献,其余位置减掉贡献,然后找区间最大值。
MOD
跟 JD1024 删边是一样的题,就是麻烦了点,最长链就是把删掉的直径拼在一起,最短的就是把两个直径的中点连在一起。需要注意的是最短的如果直径中点连起来比某一个直径小,这个新连起来的东西就无法成为最小值,计算的时候应该用最长的直径计算
WYC
倍增 floyd 的奇妙应用!
边权是 1,2,3 就可以拆点了。拆点的话不怎么难。倍增 floyd 就是处理跳 \(k\) 步的,矩阵里存的是方案数,我们可以提前预处理出跳 \(2^k\) 步的方案数,但是方案数只计算主点的,计算方法就是用一个临时矩阵,从 \(0\) 向 \(i\) 各连一条边,原矩阵一开始要从 \(i\) 向 \(0\) 连一条边,这样主点和 \(0\) 可以形成回路, \((0,0)\) 的值就是答案。
预处理之后就只需要用倍增之类的办法让他跳之后的步数正好小于 \(k\) ,(因为倍增的一个性质就是可以拆分成二进制数嘛)。
需要注意的是不是 \(0\) 的点的含义是走过了这一步的方案数,\(0\) 的含义是还未走过这一步的方案数
MYJ
这道题的比较人类智慧的状态定义。就是设 \(f_{i,j,k}\) 表示从第 \(i\) 家到第 \(j\) 家,最小值为 \(k\) 的最大收益的和。然后要枚举也是分割点,还要找到对于所有属于 \([i,j]\) 的区间中,每个点被多少区间越过去了。
然后转移就是这样的 \(f_{i,j,k}=\max \{f_{i,l-1,k}+f_{l+1,j,k}+cnt_{l,k}\times k\}\) ,其中 \(cnt_{l,k}\) 表示经过 \(l\) ,\(c\) 大于等于 \(k\) 的区间个数。然后发现 \(k\) 不重要,只关心他和 \(c\) 之间的关系,所以离散化一下,复杂度 \(O(n^3 m)\) 的。
ODW
看到隔几步跳一次的就应该想到根号分治。如果跳的步数大于 B,就直接转移,否则就是维护每个点向上跳的步数为 \(k\) 的前缀和,然后直接找到到哪里开始减就行了。
我感觉ynoi 那个比这个别扭一些
标签:题面,位置,矩阵,POI2015,倍增,合集,步数,就是 From: https://www.cnblogs.com/cc0000/p/16748325.html