标签:相等 The 说明 不为 定义 val 数学 span usaco
这道题么,首先处理一下角度
显然对于角度相同的黄金我们需要首先得到上面的黄金才能得到下面的
所以再处理一下角度相同的黄金把他们“捆绑”在一起
最后背包依次处理每个角度的黄金(角度相同只能选一个)就好了
建一个围栏的话做法很显然,直接处理出来\(x\)和\(y\)的最大值和最小值就好了
建两个围栏的话就会有一个点是分界点,也就是说那两个围栏要么通过这个点在\(x\)轴分开,要么通过这个点在\(y\)轴分开
分开之后就相当于处理两个一个围栏的情况了...ending
对于横着切的代价,就是当前行的\(val\)*(竖着已经切了的刀数\(+1\))
竖着切的代价同理,就是当前列的\(val\)*(横着已经切了的刀数\(+1\))
那么我们肯定是贪心的优先选择代价较大的就好了(把他留到后面显然付出的代价会更大)
所以排序完之后分别定义两个变量表示横着切的和竖着切的刀数,贪心就好了。
并不是很想打数学公式/xk,于是我从wljss那里学来了秘籍--甩链接
第一维\(sort\),二维归并,三维树状数组维护一下emm
\(cdq\)板子,没啥好说的emm
对于字符串的某个前缀,如果存在相同的长为\(j\)的公共前后缀,那么\(i-j\)就可以作为一个周期
所以我们的任务变成求最小的不为\(0\)的\(j\)使得它是当前处理的字符串的公共前后缀
用\(kmp\)求出\(nex\)数组之后一直跳就好了。
因为要求总操作数最小,所以我们以长度最长的串为基础打字
在长度最长的串的字母上打上标记,\(dfs\)一遍
注意最后如果已经打字完成了,就不需要删除字母了。
我们根据当前高度是否在之前存在可以得到一个\(01\)串
那么对于当前高度,如果以它为中心的极长子串是一个回文串,就说明不能以当前位置为题中的\(j\)使得构成一个等差数列,反则反之
对于回文串的判断,我们维护正反\(hash\)值比较一下是否相等就好了。
标签:相等 The 说明 不为 定义 val 数学 span usaco
原文地址:https://www.cnblogs.com/Sunny-r/p/13257604.html